如何让这个 awk 语句在 Windows 上运行?

如何让这个 awk 语句在 Windows 上运行?
awk '/DoLabelQuery\(self\)/||/QName\[[[[:digit:]][[[:digit:]]]/||/QName\[[[[:digit:]]]/ || /;BUTTON =/ || /endMethod/ || /endmethod/ ||  /add\(/ || /;CODE = /'  HELLO.fsl > x.txt

我知道必须将其制作成文件并使用 运行awk -f。我似乎无法正确理解语法。上面的示例在 Linux 终端中有效。

它可能看起来很复杂,但我所寻找的只是 5-6 个文本示例,如果找到,则会导致该行被写出到x.txtQNamename 元素只是在寻找QName[##]QName[#]

答案1

当我第一次尝试运行您的命令时,出现错误:

awk: '/DoLabelQuery\(self\)/
awk: ^ invalid char ''' in expression
'/QName\[[[[:digit:]][[[:digit:]]]/' is not recognized as an internal or external command,
operable program or batch file.
'/QName\[[[[:digit:]]]/' is not recognized as an internal or external command,
operable program or batch file.
'/' is not recognized as an internal or external command,
operable program or batch file.
'/endMethod/' is not recognized as an internal or external command,
operable program or batch file.
'/endmethod/' is not recognized as an internal or external command,
operable program or batch file.
'/add\' is not recognized as an internal or external command,
operable program or batch file.
'/' is not recognized as an internal or external command,
operable program or batch file.

这使得awk脚本的所有部分看起来都被解析为单独的单词,并且其中许多部分随后被处理为命令||。这是因为,正如这个问题表明单引号在 Windows cmd shell 中并不是真正的引号,因为它们在(大多数?)linux shell 中都是这样的。cmd 只使用双引号,幸运的是,它似乎对这个命令很有效,所以这里的解决方案是使用:

awk "/DoLabelQuery\(self\)/||/QName\[[[[:digit:]][[[:digit:]]]/||/QName\[[[[:digit:]]]/ || /;BUTTON =/ || /endMethod/ || /endmethod/ ||  /add\(/ || /;CODE = /"  HELLO.fsl > x.txt

但我希望将命令放入文件中并以这种方式使用它也应该有效。

答案2

我决定改用 Windows 的 FINDSTR 命令。它的功能比较有限,但在 Windows 平台上确实可以正常工作。请参阅https://technet.microsoft.com/en-us/library/bb490907.aspx

相关内容