括弧の間の単語のみを一致させる方法
入力する:
this is (test.com)
予想出力:
test.com
答え1
以下は、目的の出力を印刷するいくつかのオプションです。
これはフラグ(行の一致部分のみを
grep
印刷-o
)とPerl互換正規表現(-P
周りを見てください:printf "this is (test.com)\n" | grep -Po '(?<=\().*(?=\))'
この正規表現には説明が必要な場合があります。
(?<=\()
:これアクティブバックビューは通常 and 形式であり、直後のすべての場合(?<=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/'
答え2
1つの方法は次のとおりです。PCRE - Perl互換正規表現そしてgrep
:
$ echo "this is (test.com)" | grep -oP '(?<=\().*(?=\))'
test.com