括弧内の単語のみを一致させる方法
入力:this is (test.com)
欲望の出力:test.com
以下にいくつかのオプションを示します。これらはすべて目的の出力を印刷します。
grep
を-o
フラグ(行の一致する部分のみを出力)およびPerl互換の正規表現(-P
)と共に使用すると、 lookarounds を実行できます。
printf "this is (test.com)\n" | grep -Po '(?<=\().*(?=\))'
その正規表現には説明が必要な場合があります。
(?<=\()
:これは後読みであり、一般的な形式は(?<=foo)bar
であり、bar
はfoo
の直後に見つかりました。この場合、左括弧を探しているため、\(
を使用してエスケープします。
(?=\))
:これは正の先読みであり、単純に右括弧と一致します。
grep
の-o
オプションを使用すると、一致する行のみが出力されます。そのため、括弧内にあるものを探し、sed
を使用して削除します。
printf "this is (test.com)\n" | grep -o '(.*)' | sed 's/[()]//g'
Perlで全体を解析します。
printf "this is (test.com)\n" | Perl -pe 's/.*\((.+?)\)/$1/'
sed
で全体を解析します。
printf "this is (test.com)\n" | sed 's/.*(\(.*\))/\1/'
1つのアプローチは、 PCRE-grep
でPerl互換の正規表現 を使用することです。
$ echo "this is (test.com)" | grep -oP '(?<=\().*(?=\))'
test.com