1
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 просто ищет QName[##] или QName[#] .

2 ответа2

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 анализируются как отдельные слова, и многие из них затем обрабатываются, как если бы они были командами после || , Это потому, что, как показывает этот SO вопрос, одинарные кавычки на самом деле не являются кавычками в оболочке Windows cmd, как они есть (большинство?) Linux оболочки. cmd использует только двойные кавычки, что, к счастью, прекрасно работает для этой команды, поэтому решение здесь заключается в использовании:

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

хотя я ожидаю, что помещение команд в файл и их использование также должно работать.

0

Я решил вместо этого использовать команду FINDSTR в Windows. Он более ограничен, но работает правильно на платформе Windows. См. Https://technet.microsoft.com/en-us/library/bb490907.aspx.

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