我似乎无法使用grep获取圆括号内的值。
echo "(this is a string)" | grep -Eo '[az ]*'
理想情况下,应该返回括号内的值,“这是一个astring”,而不是返回任何东西。 有谁知道这个解释?
这个与-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正则表达式语法。