3

我似乎无法使用 grep 获取括号内的值。

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

理想情况下,它应该返回括号内的值,“这是一个字符串”,而不是返回任何东西。有谁知道解释?

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 回答