логическая операция с шаблоном поиска в awk? - PullRequest
2 голосов
/ 19 апреля 2019

если я хочу напечатать любую строку, содержащую optimization и {architecture or policy or network}, используя awk, как мне это сделать? Я пытался

awk '/optimization & (architecture | policy | network)/{print}' file.txt

это не сработало.

Ответы [ 3 ]

4 голосов
/ 19 апреля 2019

Вы должны использовать оператор && с двумя регулярными выражениями и удалять пробелы вокруг оператора |:

awk '/optimization/ && /architecture|policy|network/' file

См. онлайн awk демо :

s="optimization and architecture 
optimization and policy 
optimization and network
optimization and awk
no words"
awk '/optimization/ && /architecture|policy|network/' <<< "$s"

Вывод:

optimization and architecture 
optimization and policy 
optimization and network
0 голосов
/ 20 апреля 2019

попробуйте gnu awk одним из

awk '/optimization/&&/architecture|policy|network/{print}' file.txt
awk '/optimization.*(architecture|policy|network)/{print}' file.txt
0 голосов
/ 19 апреля 2019

@ Wiktors answer является верным для вашего примера, но в качестве дополнительного FYI вы можете комбинировать сравнения регулярных выражений как (первые 2 эквивалентны):

  1. /re1/ && ((re2)|(re3))/
  2. /re1/ && (/re2/ || /re3/)
  3. (/re1/ && /re2/) || /re3/

Обратите внимание на круглые скобки вокруг re2 и re3 в 1, поскольку они сами могут содержать |.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...