3

grep を使用して括弧内の値を取得できないようです。

echo "(this is a string)" | grep -Eo '[a-z ]*'

理想的には、「これは astring です」という括弧内の値を返す必要がありますが、代わりに何も返しません。誰か説明を知っていますか?

4

2 に答える 2

4

-P (perl 正規表現) を使用したこの grep は機能します。

echo "foo (this is a string) bar" | grep -Po '\(\K[^)]*'
this is a string

または awk を使用:

echo "foo (this is a string) bar" | awk -F '[()]+' '{print $2}'
this is a string

またはsedを使用:

echo "foo (this is a string) bar" | sed 's/^.*(\(.*\)*).*$/\1/'
this is a string
于 2013-08-16T21:07:47.660 に答える
0

括弧を含まず、括弧で囲まれたすべてのものを一致させようとしている場合は、次の grep を使用する必要があります。

grep -Po '(?<=\()[^\)]*?'

これ(?<=\()は、左括弧が前にある文字から開始するように正規表現エンジンに指示する否定後読みアサーションです。[^\)]*?閉じ括弧に遭遇するまで、すべての文字に一致するように指示します。は-P、Perl 正規表現構文を使用するように指示します。

于 2013-08-16T21:05:45.440 に答える