2013-07-16 64 views
0

如果我想更换一个字符型字段,说{,使用awk我可以使用:awk中查找和替换完全匹配仅

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

...但是这也将取代场如“{”(我不想)。是否有awk函数只能找到完全匹配(并替换)整个字段;适用于所有领域。

例如,以下内容:

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

将输出:

foo bar zod "<" < 

但我想它想的输出:

foo bar zod "{" < 

我也可以明确地在迭代字段和使用==来检查完全匹配,但我想知道是否这是另一种选择。

+3

请粘贴示例输入和预期输出 – Kent

+0

@Kent:现在已添加到问题中。 – user2023370

回答

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人取代。

+0

不错,^和$分别匹配一个字符串的开始和结束;因为当所寻找的角色不在空格之前或之后时。 {在gensub的第一个参数中不对应于\\ 2,因为它不在括号内。 – user2023370