web-dev-qa-db-fra.com

Utilisation de sed / awk pour imprimer des lignes avec un motif correspondant OR un autre motif correspondant

J'ai besoin d'imprimer des lignes dans un fichier correspondant à un motif [~ # ~] ou [~ # ~] un motif différent en utilisant awk ou sed . J'ai l'impression que c'est une tâche facile mais je n'arrive pas à trouver de réponse. Des idées?

20
rick

La façon POSIX

awk '/pattern1/ || /pattern2/{print}'

Éditer

Pour être juste, j'aime mieux la manière de lhf via /pattern1|pattern2/ car il nécessite moins de frappe pour le même résultat. Cependant, je dois souligner que ce modèle ne peut pas être utilisé pour les opérations AND logique, pour cela, vous devez utiliser mon modèle qui est /pattern1/ && /pattern2/

27
SiegeX

Utilisation:

sed -nr '/patt1|patt2/p'

patt1 et patt2 sont les motifs. Si vous souhaitez qu'ils correspondent à toute la ligne, utilisez:

sed -nr '/^(patt1|patt2)$/p'

Vous pouvez supprimer le -r et ajoutez des échappements:

sed -n '/^\(patt1\|patt2\)$/p'

pour la conformité POSIX.

22
Matthew Flaschen

awk '/PATT1|PATT2/ { print }'

6
lhf

pourquoi ne voulez-vous pas utiliser grep?

grep -e 'pattern1' -e 'pattern2'
6
Vijay