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