awk - 如何只获取正则表达式的匹配部分

时间:2013-10-05 23:24:41

标签: regex awk

我有这样的代码

echo abc | awk '$0 ~ "a\(b\)c" {print $0}'

如果我只想要括号而不是整行,怎么办?这显然非常简单,并且确实有很多awk代码所以我不想切换到sed或grep或者其他东西。感谢

2 个答案:

答案 0 :(得分:3)

据我所知,您无法在pattern部分执行此操作,您必须使用action功能在match()部分内执行此操作:

echo abc | awk '{ if ( match($0, /a(b)c/, a) > 0 ) { print a[1] } }'

它产生:

b

答案 1 :(得分:2)

使用GNU awk:

$ echo abc | awk '{print gensub(/a(b)c/,"\\1","")}'
b