web-dev-qa-db-ja.com

grep:括弧の間のすべてに一致する場合のみ正規表現

括弧内の単語のみを一致させる方法

入力:this is (test.com)

欲望の出力:test.com

22
Rahul Patil

以下にいくつかのオプションを示します。これらはすべて目的の出力を印刷します。

  1. grep-oフラグ(行の一致する部分のみを出力)およびPerl互換の正規表現(-P)と共に使用すると、 lookarounds を実行できます。

    printf "this is (test.com)\n" | grep -Po '(?<=\().*(?=\))'
    

    その正規表現には説明が必要な場合があります。

    • (?<=\():これは後読みであり、一般的な形式は(?<=foo)barであり、barfooの直後に見つかりました。この場合、左括弧を探しているため、\(を使用してエスケープします。

    • (?=\)):これは正の先読みであり、単純に右括弧と一致します。

  2. grep-oオプションを使用すると、一致する行のみが出力されます。そのため、括弧内にあるものを探し、sedを使用して削除します。

    printf "this is (test.com)\n" | grep -o '(.*)' | sed 's/[()]//g'
    
  3. Perlで全体を解析します。

    printf "this is (test.com)\n" | Perl -pe 's/.*\((.+?)\)/$1/'
    
  4. sedで全体を解析します。

    printf "this is (test.com)\n" | sed 's/.*(\(.*\))/\1/'
    
29
terdon

1つのアプローチは、 PCRE-grepでPerl互換の正規表現 を使用することです。

$ echo "this is (test.com)" | grep -oP '(?<=\().*(?=\))'
test.com

参考文献

5
slm