我正在从Windows CMD发出gawk命令,但它只是卡在那里.Sig命令在Cygwin终端中运行得非常好。 我试图在行号30之后的文件的第一列上找到第一次出现的结尾括号“}”
命令是
gawk 'NR > 30 && /^}$/ { print NR; exit }' Filename.c > Output.txt
我注意到另一件事,当我发出命令格式CMD时,除了粘贴它创建一个名称为行号的文件(如果执行上面的命令,则创建30)
答案 0 :(得分:0)
命令行
gawk 'NR > 30 && /^}$/ { print NR; exit }' Filename.c > Output.txt
由于两个原因,Windows命令解释器不会按预期解释:
与Unix和Linux shell相比,直接单引号在Windows命令行中没有特殊含义。因此,两个单引号中的字符串不会像Unix / Linux中的shell一样被解释为单个参数字符串。
gawk
的参数字符串包含几个在Windows命令进程中具有特殊含义的字符:
>
...重定向操作员&&
...条件命令连接运算符^
...用于转义>
和&
等运算符的字符,用于在命令执行时被解释为文字字符。在打开命令提示符窗口并运行cmd /?
时,Windows命令解释程序的简要帮助将在多个页面上输出。最后一个帮助页面的最后一段列出了目录/文件名或其他字符串中的哪些字符需要用直接双引号括起名称/字符串。
因此Windows命令行的标准解决方案将使用
gawk.exe "NR > 30 && /^}$/ { print NR; exit }" Filename.c > Output.txt
但这也不会产生预期的结果。我想,但不确定,gawk
从Unix / Linux移植到Windows而不适应单引号和双引号的解释。
因此需要另一种解决方案,即使用单引号并转义gawk
参数字符串中的每个特殊字符,以便Windows命令解释器将其解释为文字字符。
gawk.exe 'NR ^> 30 ^&^& /^^}$/ { print NR; exit }' Filename.c > Output.txt
此命令行使得带有参数字符串的Unix / Linux控制台应用程序gawk
在Windows中也可以在Windows命令进程中运行。
答案 1 :(得分:0)
避免Windows引用地狱的标准建议是将awk脚本(在本例中为NR > 30 && /^}$/ { print NR; exit }
)存储在一个文件中(例如名为script.awk
)并将其作为awk -f script.awk Filename.c > Output.txt
执行。