代码之家  ›  专栏  ›  技术社区  ›  rookie

在windows awk上转义反斜杠和括号

  •  0
  • rookie  · 技术社区  · 7 年前

    我有一个 awk 我要在其上使用的命令 cmd . 下面的命令在 bash ,但在Windows上失败 命令 :

    echo errr | awk '/err/ { $0 = "\033[32m" $0 "\033[39m" }; 1'
    

    在Windows上出现以下错误:

    awk: cmd. line:1: '/err/
    awk: cmd. line:1: ^ invalid char ''' in expression
    

    经过一些问题之后,我把命令改为:

     echo errr | awk "/err/ { $0 = "\033[32m" $0 "\033[39m" }; 1"
    

    但这给了我:

    awk: cmd. line:1: /err/ { $0 = \033[32m $0 \033[39m }; 1
    awk: cmd. line:1:              ^ backslash not last character on line
    awk: cmd. line:1: /err/ { $0 = \033[32m $0 \033[39m }; 1
    awk: cmd. line:1:              ^ syntax error
    

    我怎样才能把命令输入 CMD ?

    1 回复  |  直到 7 年前
        1
  •  2
  •   Ed Morton    7 年前

    在Windows上运行awk时的标准建议:

    a)不要这样做,安装cygwin并从那里运行awk

    b)如果“a”不可能,那么创建一个文件“foo.awk”,存储您的脚本 /err/ { $0 = "\033[32m" $0 "\033[39m" }; 1 在里面,然后作为 awk -f foo.awk 为了避免windows恶梦般的引用规则。

        2
  •  1
  •   Slawomir Dziuba    7 年前

    不用awk'your commands'使用awk-e'your commands',应该没有错误。我没有窗户要检查。它会给文本上色吗?在你的问题下面读我的评论。

    编辑: 好的,现在如果您在powershell中有版本6,它应该可以像这样着色:

    echo errr | awk -e "/err/ { $0 = '`e[32m' $0 '`e[39m'}; 1 "
    

    如果有不同版本的窗口,请在我提供的链接中查找正确的转义序列。