如何在括号中提取精确的字符串?
我尝试的是:
echo "test [test1] test" | grep -Po "(?=\[).*?(?=\])"
但输出是:
[test1
应该是:
test1
最好使用grep
。
答案 0 :(得分:6)
使用lookbehind:
echo "test [test1] test" | grep -Po "(?<=\[).*?(?=\])"
答案 1 :(得分:4)
awk
也应该这样做:
echo "test [test1] test" | awk -F"[][]" '{print $2}'
test1
或sed
echo "test [test1] test" | sed 's/[^[]*\[\|\].*//g'
test1
答案 2 :(得分:3)
另一种解决方案,值得一提:
echo "test [test1] test" | grep -Po '[^\[]+(?=[\]])'
在这种情况下,模式A(?=B)
表示:查找A
,其中表达式B
。
如果您想要[
和]
,可以试试这个:
echo "test [test1] test" | grep -Po '[\[].*[\]]'
答案 3 :(得分:2)
我宁愿否定]
以防止贪婪匹配:
echo "test [test1] test [test2] xyz" | grep -Po "(?<=\[)[^\]]*(?=\])"
输出:
test1
test2
答案 4 :(得分:1)
这适用于任何版本的sed,因为它只是一个普通的旧BRE:
$ echo "test [test1] test" | sed 's/.*\[\(.*\)\].*/\1/'
test1