这看起来应该很简单,但awk gensub / gsub / sub行为对我来说一直都不清楚,现在我无法让它做文档说应该做的事情(以及什么样的经验)与其他类似的工具建议应该工作)。具体来说,我想从替换字符串中的正则表达式访问“捕获的组”。这就是我认为awk语法应该是:
awk '{ gsub(/a(b*)c/, "Here are bees: \1"); print; }'
那应该将“abbbc”变成“这里有蜜蜂:bbb”。在Ubunutu 9.04中,它至少不适合我。相反,“\ 1”呈现为^ A;也就是说,代码的字符1.当然不是我想要的。我该怎么做?
感谢。
答案 0 :(得分:25)
echo abbc | awk '{ print gensub(/a(b*)c/, "Here are bees: \\1", "g", $1);}'
请参阅手册here,了解gsub和gensub
之间的区别答案 1 :(得分:23)
根据gawk手册
gensub提供了一项附加功能 在sub或gsub中不可用: 指定组件的能力 替换文本中的正则表达式。这个 是通过使用圆括号来完成的 regexp标记组件然后 在替换中指定'\ N' 文本,其中N是从1到9的数字。
您必须使用gensub,必须指定“g”,并且必须获取gensub的结果,因为它不会就地修改。
awk '{ r = gensub(/a(b*)c/, "Here are bees: \\1", "g"); print r; }'