我正在尝试使用 Gnuwin32 grep 命令生成要提供给另一个命令(实际上是 Perl 脚本)的文件列表。我有一堆 HTML 文件,我希望列出与正则表达式匹配的每个文件itemprop=['"]description
。
现在,经过一番摆弄,我发现 cmd.exe 调用
grep -i -E -l "itemprop=['\"]description" path/to/files/*.htm
工作正常,但我无法将其输出通过管道传输到 perl(或任何其他命令):
grep -i -E -l "itemprop=['\"]description" path/to/files/*.htm | perl myscript.pl
将文件列表打印到终端,然后
grep: |: No such file or directory grep: perl: No such file or directory myscript.pl
grep 将 | 及其后续单词视为参数。如何避免这种情况?
此外,我尝试使用 Powershell 来解决这个问题。我可以从那里顺利地进行管道传输(如果我使用基本表达式,如“itemprop”),但我无法指定要搜索的表达式。
grep -i -E -l "itemprop=['\"]description" path/to/files/*.htm
根本不起作用。Powershell 显示一个 >> 符号,我甚至不知道它是什么意思(需要更多输入)?我尝试了各种转义引号的方法,但似乎都不起作用。有时是 shell,有时是 grep 抱怨 [ 字符不匹配。
任何帮助是极大的赞赏。
答案1
似乎您发现了不同解析器处理引号的方式存在冲突。解决此问题的最简单方法是转义grep
搜索表达式的结束引号
grep -iEl "itemprop=['\"]description^" path/to/files/*.htm | perl myscript.pl