为什么awk sub/gsub只是擦除匹配?

wol*_*son 3 awk

我在Windows上的批处理文件中使用awk.出于某种原因,sub/gsub正在擦除匹配,而不是替换.我把头发拉过来......这是一个示例线:

awk "{ gsub(/ZSection/, "Section"); print}" temp1.txt > temp2.txt
Run Code Online (Sandbox Code Playgroud)

结果:"ZSection"刚刚在temp2.​​txt中消失.没有"部分",任何地方.

我在我的机器上的其他脚本中使用sub/gsub没有问题,语法相同(我认为?除非我只是盲目和/或疯狂).

我错过了什么?是否有可能批处理文件中的其他操作与sub/gsub的功能相混淆?救命!

Ken*_*ent 8

这是你的代码,它不起作用.

awk "{ gsub(/ZSection/, "Section"); print}" temp1.txt
Run Code Online (Sandbox Code Playgroud)

这是正确的代码:

awk '{ gsub(/ZSection/, "Section"); print}' temp1.txt
Run Code Online (Sandbox Code Playgroud)

你能找到差异吗?

如果我们进一步深入,您的匹配模式将被删除.因为变量 Section没有设置任何值.是的,这里awk认为这Section是一个变量.如果你想证明它:

awk "{Section=555; gsub(/ZSection/, "Section"); print}" temp1.txt
awk "{Section=\"hello\"; gsub(/ZSection/, "Section"); print}" temp1.txt
Run Code Online (Sandbox Code Playgroud)

检查上面两行的输出,你会看到.

我的答案的第二部分只是为了解释为什么删除了比赛.但是我们应该正确引用命令.


Bir*_*rei 7

您的问题似乎与脚本和替换字符串的引号相同.用单引号替换外部对:

awk '{ gsub(/ZSection/, "Section"); print}' temp1.txt > temp2.txt
Run Code Online (Sandbox Code Playgroud)