我想提取" yy a1 b1"用awk表达式
echo "xx yy [a1 b1] / zz [a2 b2]/" | awk '{p=gensub(/.*\[([a-z0-9 ]+)\].*/,"\\1",1); print $2,p}'
但总是得到" yy a2 b2"。我可能会找到一个解决方案,但只是好奇上面的表达问题。 prototype of gensub是:
gensub(regexp, replacement, how [, target])
为什么指定'如何'没有生效?
答案 0 :(得分:1)
关键是第一个.*
尽可能多的字符,从而使正则表达式引擎匹配剩余子图案的最后一次出现。
您可以使用以下解决方案:
/[^][]*\[([a-z0-9 ]+)\].*/
其中[^][]*
匹配除]
和[
以外的任何0个或多个字符,因此,允许正则表达式引擎在第一个[...]
之前停止
请参阅online demo
答案 1 :(得分:0)
关注awk
也可以帮助您。
echo "xx yy [a1 b1] / zz [a2 b2]/". | awk -F'[] []' '{print $2,$4,$5}'
输出如下。
yy a1 b1