Gnuwin32 grep: конвейерный вывод в cmd.exe или Powershell
Я пытаюсь использовать команду 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
греп лечит | и последующие слова в качестве аргументов. Как мне этого избежать?
Кроме того, я попытался преодолеть проблему с Powershell. Оттуда я могу просто передать по конвейеру (если я использую элементарное выражение, например "itemprop"), но у меня возникают проблемы при определении выражения для поиска.
grep -i -E -l "itemprop=['\"]description" path/to/files/*.htm
просто не работает. Powershell показывает мне знак >> Я даже не знаю, что это значит (ожидая большего ввода)? Я попробовал все способы избежать кавычек, но ни один, кажется, не работает. Иногда это оболочка, иногда grep, который жалуется на непревзойденного персонажа.
Любая помощь очень ценится.
1 ответ
Кажется, вы обнаружили коллизию о том, как обрабатываются кавычки различными задействованными синтаксическими анализаторами. Самый простой способ решить это дело - просто избежать заключительной цитаты grep
поисковое выражение
grep -iEl "itemprop=['\"]description^" path/to/files/*.htm | perl myscript.pl