回答:
以下にいくつかのオプションを示します。これらはすべて、目的の出力を印刷します。
使用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