Я пытаюсь использовать команду Gnuwin32 grep для создания списка файлов, которые я хотел бы передать другой команде (на самом деле Perl-скрипт). У меня есть куча файлов HTML, и я хочу перечислить каждый из них, который соответствует описанию regexp 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 ответ1

0

Кажется, вы столкнулись с тем, как кавычки обрабатываются различными анализаторами. Самый простой способ решить этот случай - просто избежать закрывающей кавычки выражения поиска grep

grep -iEl "itemprop=['\"]description^" path/to/files/*.htm | perl myscript.pl

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .