Utilisez ack. Commander son --passthru
option ici :ack. Il a l'avantage supplémentaire de permettre des expressions régulières complètes en Perl.
$ ack --passthru 'pattern1' file_name
$ command_here | ack --passthru 'pattern1'
Vous pouvez également le faire en utilisant grep comme ceci :
$ grep --color -E '^|pattern1|pattern2' file_name
$ command_here | grep --color -E '^|pattern1|pattern2'
Cela correspondra à toutes les lignes et mettra en évidence les motifs. Le ^
correspond à chaque début de ligne, mais ne sera pas imprimé/surligné puisqu'il ne s'agit pas d'un caractère.
(Notez que la plupart des configurations utiliseront --color par défaut. Vous n'aurez peut-être pas besoin de cet indicateur).
Vous pouvez vous assurer que toutes les lignes correspondent mais il n'y a rien à mettre en évidence sur les correspondances non pertinentes
egrep --color 'apple|' test.txt
Remarques :
egrep
peut aussi s'écriregrep -E
--color
est généralement par défaut dans la plupart des distributions- certaines variantes de grep "optimiseront" la correspondance vide, vous pouvez donc utiliser "apple|$" à la place (voir :https://stackoverflow.com/a/13979036/939457)
MODIF :
Cela fonctionne avec le grep d'OS X Mountain Lion :
grep --color -E 'pattern1|pattern2|$'
C'est mieux que '^|pattern1|pattern2'
parce que le ^
une partie de l'alternance correspond au début de la ligne alors que le $
correspond à la fin de la ligne. Certains moteurs d'expressions régulières ne mettront pas en surbrillance pattern1
ou pattern2
car ^
déjà apparié et le moteur est impatient .
Quelque chose de similaire se produit pour 'pattern1|pattern2|'
car le moteur regex remarque que l'alternance vide à la fin de la chaîne de modèle correspond au début de la chaîne sujet.
[1]: http://www.regular-expressions.info/engine.html
PREMIÈRE MODIFICATION :
J'ai fini par utiliser perl :
perl -pe 's:pattern:\033[31;1m$&\033[30;0m:g'
Cela suppose que vous disposez d'un terminal compatible ANSI.
RÉPONSE ORIGINALE :
Si vous êtes coincé avec un étrange grep
, cela pourrait fonctionner :
grep -E --color=always -A500 -B500 'pattern1|pattern2' | grep -v '^--'
Ajustez les chiffres pour obtenir toutes les lignes souhaitées.
Le deuxième grep
supprime simplement le --
superflu lignes insérées par le style BSD grep
sur Mac OS X Mountain Lion, même lorsque les contextes de correspondances consécutives se chevauchent.
Je pensais que GNU grep avait omis le --
lignes lorsque le contexte se chevauche, mais ça fait un moment donc peut-être que je me souviens mal.