Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么awk sub/gsub只是删除匹配项?_Awk - Fatal编程技术网

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

为什么awk sub/gsub只是删除匹配项?,awk,Awk,我正在windows上的批处理文件中使用awk。出于某种原因,sub/gsub正在擦除匹配项,而不是替换匹配项。我对这件事很感兴趣…这是一条样本线: awk "{ gsub(/ZSection/, "Section"); print}" temp1.txt > temp2.txt 结果:“ZSection”刚在temp2.txt中消失。没有“部分”,任何地方 我在我的机器上的其他脚本中使用sub/gsub,没有问题,语法相同(我想?除非我只是瞎了眼和/或疯了) 我错过了什么?批处理文件中

我正在windows上的批处理文件中使用awk。出于某种原因,sub/gsub正在擦除匹配项,而不是替换匹配项。我对这件事很感兴趣…这是一条样本线:

awk "{ gsub(/ZSection/, "Section"); print}" temp1.txt > temp2.txt
结果:“ZSection”刚在temp2.txt中消失。没有“部分”,任何地方

我在我的机器上的其他脚本中使用sub/gsub,没有问题,语法相同(我想?除非我只是瞎了眼和/或疯了)


我错过了什么?批处理文件中的其他操作是否可能与sub/gsub的功能发生冲突?救命啊

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

awk '{ gsub(/ZSection/, "Section"); print}' temp1.txt > temp2.txt

这是你的代码,不起作用

awk "{ gsub(/ZSection/, "Section"); print}" temp1.txt
这是正确的代码:

awk '{ gsub(/ZSection/, "Section"); print}' temp1.txt
你能找到区别吗

如果我们再深入一点,你的匹配模式就被删除了。因为变量
部分
未设置任何值。是的,这里awk认为
部分是一个变量。如果你想证明这一点:

awk "{Section=555; gsub(/ZSection/, "Section"); print}" temp1.txt
awk "{Section=\"hello\"; gsub(/ZSection/, "Section"); print}" temp1.txt
检查以上两行的输出,您将看到

我回答的第二部分只是为了解释为什么删除了匹配项。但是,我们应该正确引用该命令

awk "{ gsub(/ZSection/, \"Section\"); print}" temp1.txt > temp2.txt

发现另一个关于Windows7中awk报价的溢出问题(感谢其他海报提到报价,尽管他们的解决方案不起作用)。那里的解决方案建议使用类似于“Section”的语法。这是可行的,但它似乎比我的脚本工作所需的多了一组引号。都在斜线上…

很好的解释。值得+1是和否…搜索了“awk windows quotes”,发现转义序列不同。正确的语法是“{gsub(/ZSection/,\“Section\”);print}”。谢谢你给我指明了正确的方向@沃尔夫梅森:谢谢。我只在Linux中测试了它。我在答案中添加了适用于Windows的正确答案。编辑:阿格,现在意识到你添加了自己的答案,所以我将从我的答案中删除它。