Si je veux imprimer une ligne contenant optimisation
et {architecture ou politique ou réseau}
en utilisant awk, comment dois-je le faire? J'ai essayé
awk '/optimization & (architecture | policy | network)/{print}' file.txt
cela n'a pas fonctionné.
3 Réponses :
Vous devez utiliser un opérateur &&
avec deux expressions régulières et supprimer les espaces autour de l'opérateur |
:
optimization and architecture optimization and policy optimization and network
Voir une démo en ligne awk
:
s="optimization and architecture optimization and policy optimization and network optimization and awk no words" awk '/optimization/ && /architecture|policy|network/' <<< "$s"
Ah c'était ça. Je vous remercie!
réponse @Wiktors est correcte pour votre exemple, mais tout comme FYI supplémentaire en général, vous pouvez combiner des comparaisons d'expressions rationnelles comme ( les 2 premiers sont équivalents):
/ re1 / && ((re2) | (re3)) /
/ re1 / && (/ re2 / || / re3 /)
(/ re1 / && / re2 /) || / re3 /
Notez les parenthèses autour de re2
et re3
dans 1
car elles pourraient elles-mêmes contenir |
. p >
essayez gnu awk avec l'un des
awk '/optimization/&&/architecture|policy|network/{print}' file.txt awk '/optimization.*(architecture|policy|network)/{print}' file.txt