2015-04-01 89 views
0

我试过gsub(),但没有奏效。这里是命令:如何在Windows下通过awk将双引号替换为双引号?

awk -v a="'" b=" \" " "gsub(a,b,$0){print $0}" D:\re.json 

或任何人都可以告诉我在Windows命令行中正确的转义字符是什么?

+2

尝试'\ 047'。在Windows中的常见建议是不要试图对付疯狂的引用 - 只要把你的awk脚本放在一个文件中并执行它''-f''。 – 2015-04-01 04:02:35

+0

我用\ 047,但它说“反斜杠不是最后一个字符在线。”如何解决这个错误?非常感谢你。 – wanderlustwei 2015-04-01 05:22:43

+1

@wanderlustwei把它放在一个文件中。 – 2015-04-01 07:22:33

回答

1

建议将脚本放入文件中。参考Windows,我们会将上下文理解为Windows批处理文件(而不是说,mingw在命令行脚本中有自己的问题)。对于Windows批处理文件程序尚未看到之前

  • 没有充分证明,以逃避双引号
  • 单引号原样传递到程序(方法

    • 双引号都吃过而不是像在Bourne shell中那样用于引用)。

    这里是哪里的问题进行了讨论几个环节:

    所以规则是从什么awk的这种需求完全不同施工。顺便提一下,最后一个链接提供了一些线索,您可以使用这些线索来设计一种解决方法(以可读性为代价)。这也在Escaping Double Quotes in Batch Script中讨论过。

    作为一个单独的文件,脚本也将是更具可读性,例如,调用foo.awk

    gsub("'"," \" ",$0){print $0} 
    

    ,并用它作为

    awk -f foo.awk D:\re.json 
    
  • +0

    无需编写'{print $ 0}'或提供'$ 0' arg或'gsub()' - 这是默认行为。整个脚本只是'gsub(/'/,“\”“)'。我还更改了gsub()的第一个arg的分隔符,因为它是RE而不是字符串 - 不会改变行为这种情况下,但在其他情况下,这是一个很好的习惯, – 2015-04-01 14:04:00

    +0

    我最小改变了问题的脚本,以显示引用的影响,如果它是推荐的东西,我会显示一个'^'转义的解决方法的方式看起来不错 - 但结果很难阅读,也不可重复使用。 – 2015-04-02 08:10:20