0

我有这样的代码

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

如果我只想要括号中的内容而不是整行怎么办?这显然是非常简化的,而且真的有很多 awk 代码所以我不想切换到 sed 或 grep 什么的。谢谢

4

2 回答 2

3

据我所知,您不能在pattern零件中执行此操作,您必须在action具有以下match()功能的零件内执行此操作:

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

它产生:

b
于 2013-10-05T23:30:11.987 回答
2

使用 GNU awk:

$ echo abc | awk '{print gensub(/a(b)c/,"\\1","")}'
b
于 2013-10-06T12:08:48.990 回答