回答:
以下にいくつかのオプションを示します。これらはすべて、目的の出力を印刷します。
使用grep
して-o
フラグ(のみラインのマッチング部分を印刷)とPerl互換正規表現(-P
実行できる)前後参照。
printf "this is (test.com)\n" | grep -Po '(?<=\().*(?=\))'
その正規表現には説明が必要な場合があります。
(?<=\()
:これは肯定後読み、一般的な形式は(?<=foo)bar
、それはすべてのケースに一致しますbar
た直後にfoo
。この場合、開き括弧を探しているので\(
、エスケープに使用します。
(?=\))
:これは肯定的な先読みであり、単に閉じ括弧と一致します。
-o
オプションgrep
我々はカッコ内にあり、その後でそれらを削除何を探して原因はそれだけで、任意の行のマッチした部分を印刷します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-Perl Compatible Regular Expressions with with を使用することgrep
です。
$ echo "this is (test.com)" | grep -oP '(?<=\().*(?=\))'
test.com