Выведите строку из файла .txt, в которой есть ключевое слово с круглыми скобками. - PullRequest
0 голосов
/ 09 марта 2019

Я пытаюсь распечатать строки набора выходных файлов, которые содержат символы "g (tot)" в них.

awk '/g(tot)/{print}' ./*/*.out

Однако, это ничего не печатает, и, похоже, это связано с круглыми скобками вокруг "tot". Как я могу обойти это?

Ответы [ 2 ]

1 голос
/ 09 марта 2019

( и ) интерпретируются как специальные символы в регулярном выражении.

Escape ( и ) с \:

 awk '/g\(tot\)/{print}' ./*/*.out
0 голосов
/ 09 марта 2019

() - специальные символы в RegEx , они предназначены для перехвата вещей в группе

(…)
Скобки используются для группировки в регулярных выражениях,как в арифметике.Они могут использоваться для объединения регулярных выражений, содержащих оператор чередования '|'.Например, '@ (samp | code) {[^}] +}' соответствует обоим '@code {foo}' и '@samp {bar}'.(Это управляющие последовательности форматирования Texinfo. «+» Объясняется далее в этом списке.)

Так что /g(tot)/ фактически соответствует gtot, а не g(tot).
Вам необходимоэкранировать его, как это /g\(tot\)/.
Также вы можете удалить часть {print}, она подразумевается после условия, так что суммы:

awk '/g\(tot\)/' ./*/*.out

Однако для этой простой задачи япредложил бы использовать grep вместо:

awk 'g\(tot\)' ./*/*.out

И вы также можете использовать sed:

sed -n '/g\(tot\)/p' ./*/*.out
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...