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:
egreppuò essere scritto anchegrep -E--colordi 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.