Awk仅查找和替换完全匹配

时间:2013-07-16 08:08:05

标签: regex replace awk

如果我想替换字符字段,请说 {,使用awk我可以使用:

awk '{ gsub(/{/, "<"); print }' file

...但这也会替换“{”(我不想要)这样的字段。是否有一个awk函数,只能找到整个字段的完全匹配(和替换);适用于所有领域。

例如,以下内容:

$ echo "foo bar zod \"{\" {" | awk '{ gsub(/{/, "<"); print }'

将输出:

foo bar zod "<" <

但我想输出:

foo bar zod "{" <

我还可以明确地迭代字段并使用 == 来检查完全匹配,但我想知道是否有替代方案。

1 个答案:

答案 0 :(得分:3)

我会按照您的说法进行操作,遍历所有字段,使用==/^{$/进行检查。

但是如果我们玩一些技巧,可以不用循环来完成:(gnu awk)

awk '$0=gensub(/(\s|^){(\s|$)/, "\\1<\\2","g")'                                                                                  

检查这个例子:

kent$ echo '{ foo "{" and this: { bar {'|awk '$0=gensub(/(\s|^){(\s|$)/, "\\1<\\2","g")'
< foo "{" and this: < bar <

在上面的示例中,4个{中的3个被替换。