awk '/DoLabelQuery\(self\)/||/QName\[[[[:digit:]][[[:digit:]]]/||/QName\[[[[:digit:]]]/ || /;BUTTON =/ || /endMethod/ || /endmethod/ || /add\(/ || /;CODE = /' HELLO.fsl > x.txt
我知道必须将其制作成文件并使用 运行awk -f
。我似乎无法正确理解语法。上面的示例在 Linux 终端中有效。
它可能看起来很复杂,但我所寻找的只是 5-6 个文本示例,如果找到,则会导致该行被写出到x.txt
。QName
name 元素只是在寻找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