我似乎无法使用 grep 获取括号内的值。
echo "(this is a string)" | grep -Eo '[a-z ]*'
理想情况下,它应该返回括号内的值,“这是一个字符串”,而不是返回任何东西。有谁知道解释?
这个带有 -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
如果您尝试匹配括号中的所有内容,不包括括号,您应该使用这个 grep:
grep -Po '(?<=\()[^\)]*?'
这(?<=\()
是一个否定的后向断言,它告诉正则表达式引擎从前面有左括号的字符开始。[^\)]*?
告诉它匹配所有字符,直到遇到右括号。-P
告诉它使用 Perl 正则表达式语法。