2
votes

opération logique avec motif de recherche dans awk?

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é.

awk

0 commentaires

3 Réponses :


4
votes

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"


1 commentaires

Ah c'était ça. Je vous remercie!



0
votes
La

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):

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

Notez les parenthèses autour de re2 et re3 dans 1 car elles pourraient elles-mêmes contenir | .


0 commentaires

0
votes

essayez gnu awk avec l'un des

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


0 commentaires