CMD 中的 gawk 命令与 && 运算符不工作
gawk command in CMD with && operator not working
我正在从 Windows CMD 发出 gawk 命令,但它只是卡住了 there.Same 命令在 Cygwin 终端中运行得非常好。
我试图在第 30 行
之后的文件的第一列中找到第一次出现的结尾大括号“}”
命令是
gawk 'NR > 30 && /^}$/ { print NR; exit }' Filename.c > Output.txt
我注意到另一件事,当我发出命令形式的 CMD 时,除了坚持它会创建一个名为行号的文件(如果执行上述命令,则创建 30)
命令行
gawk 'NR > 30 && /^}$/ { print NR; exit }' Filename.c > Output.txt
未按预期由 Windows 命令解释器解释,原因有两个:
与 Unix 和 Linux shell 相比,Windows 命令行上的直单引号没有特殊含义。因此,两个直单引号内的字符串不会像 Unix/Linux.
上的 shell 那样被解释为单个参数字符串
gawk
的参数字符串包含几个在Windows命令过程中具有特殊含义的字符:
>
... 重定向运算符
有关此运算符的详细信息,请参阅 Microsoft TechNet 文章 Using command redirection operators。
&&
...条件命令连接运算符
有关此运算符的详细信息,请参阅 Single line with multiple commands using Windows batch file 上的答案。
^
... 用于转义运算符的字符,例如 >
和 &
,用于在命令执行时被解释为文字字符。
在打开命令提示符 window 和 运行 cmd /?
时,Windows 命令解释器的简短帮助会在几页上输出。最后一个帮助页面的最后一段列出了 directory/file 名称或其他字符串中的哪些字符需要用直双引号将 name/string 括起来。
所以 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 命令进程中工作。
避免 Windows 引用地狱的标准建议是将 awk 脚本(在本例中为 NR > 30 && /^}$/ { print NR; exit }
)存储在文件中(例如命名为 script.awk
)并以 awk -f script.awk Filename.c > Output.txt
.
我正在从 Windows CMD 发出 gawk 命令,但它只是卡住了 there.Same 命令在 Cygwin 终端中运行得非常好。 我试图在第 30 行
之后的文件的第一列中找到第一次出现的结尾大括号“}”命令是
gawk 'NR > 30 && /^}$/ { print NR; exit }' Filename.c > Output.txt
我注意到另一件事,当我发出命令形式的 CMD 时,除了坚持它会创建一个名为行号的文件(如果执行上述命令,则创建 30)
命令行
gawk 'NR > 30 && /^}$/ { print NR; exit }' Filename.c > Output.txt
未按预期由 Windows 命令解释器解释,原因有两个:
与 Unix 和 Linux shell 相比,Windows 命令行上的直单引号没有特殊含义。因此,两个直单引号内的字符串不会像 Unix/Linux.
上的 shell 那样被解释为单个参数字符串
gawk
的参数字符串包含几个在Windows命令过程中具有特殊含义的字符:>
... 重定向运算符
有关此运算符的详细信息,请参阅 Microsoft TechNet 文章 Using command redirection operators。&&
...条件命令连接运算符
有关此运算符的详细信息,请参阅 Single line with multiple commands using Windows batch file 上的答案。^
... 用于转义运算符的字符,例如>
和&
,用于在命令执行时被解释为文字字符。
在打开命令提示符 window 和 运行 cmd /?
时,Windows 命令解释器的简短帮助会在几页上输出。最后一个帮助页面的最后一段列出了 directory/file 名称或其他字符串中的哪些字符需要用直双引号将 name/string 括起来。
所以 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 命令进程中工作。
避免 Windows 引用地狱的标准建议是将 awk 脚本(在本例中为 NR > 30 && /^}$/ { print NR; exit }
)存储在文件中(例如命名为 script.awk
)并以 awk -f script.awk Filename.c > Output.txt
.