Usa ack. Acquista il suo --passthru
opzione qui:ack. Ha l'ulteriore vantaggio di consentire espressioni regolari Perl complete.
$ ack --passthru 'pattern1' file_name
$ command_here | ack --passthru 'pattern1'
Puoi anche farlo usando grep in questo modo:
$ grep --color -E '^|pattern1|pattern2' file_name
$ command_here | grep --color -E '^|pattern1|pattern2'
Questo abbinerà tutte le linee ed evidenzierà i modelli. Il ^
corrisponde a ogni inizio di riga, ma non verrà stampato/evidenziato poiché non è un carattere.
(Nota che la maggior parte delle configurazioni utilizzerà --color per impostazione predefinita. Potresti non aver bisogno di quel flag).
Puoi assicurarti che tutte le righe corrispondano, ma non c'è nulla da evidenziare sulle corrispondenze irrilevanti
egrep --color 'apple|' test.txt
Note:
egrep
può essere scritto anchegrep -E
--color
di solito è predefinito nella maggior parte delle distribuzioni- alcune varianti di grep "ottimizzeranno" la corrispondenza vuota, quindi potresti voler utilizzare "apple|$" (vedi:https://stackoverflow.com/a/13979036/939457)
MODIFICA:
Funziona con grep di OS X Mountain Lion:
grep --color -E 'pattern1|pattern2|$'
Questo è meglio di '^|pattern1|pattern2'
perché il ^
parte dell'alternanza corrisponde all'inizio della riga mentre $
corrisponde alla fine della linea. Alcuni motori di espressioni regolari non evidenzieranno pattern1
o pattern2
perché ^
già abbinati e il motore è desideroso .
Qualcosa di simile accade per 'pattern1|pattern2|'
perché il motore regex nota che l'alternanza vuota alla fine della stringa del modello corrisponde all'inizio della stringa dell'oggetto.
[1]: http://www.regular-expressions.info/engine.html
PRIMA MODIFICA:
Ho finito per usare perl:
perl -pe 's:pattern:\033[31;1m$&\033[30;0m:g'
Ciò presuppone che tu abbia un terminale compatibile con ANSI.
RISPOSTA ORIGINALE:
Se sei bloccato con uno strano grep
, potrebbe funzionare:
grep -E --color=always -A500 -B500 'pattern1|pattern2' | grep -v '^--'
Regola i numeri per ottenere tutte le righe che desideri.
Il secondo grep
rimuove semplicemente i --
estranei righe inserite dallo stile BSD grep
su Mac OS X Mountain Lion, anche quando il contesto di corrispondenze consecutive si sovrappone.
Pensavo che GNU grep avesse omesso il --
righe quando il contesto si sovrappone, ma è passato un po' di tempo quindi forse ricordo male.