0

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

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

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

例如,以下内容:

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

将输出:

foo bar zod "<" <

但我希望它输出:

foo bar zod "{" <

我也可以显式地遍历字段并使用==来检查是否完全匹配,但我想知道是否有替代方法。

4

1 回答 1

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 个。

于 2013-07-16T21:00:30.397 回答