Risposte:
Il grep
comando accetta --color=always
un'opzione, quindi puoi usarlo
grep 'keyword1' file.log --color=always | grep 'keyword2'
Come sottolinea gertvdijk , questo comando potrebbe essere inefficiente, ma cercherà tutte le righe che contengono sia keyword1 che keyword2. Se si desidera evidenziarli in diversi colori, è possibile utilizzare
grep 'keyword1' file.log --color=always | GREP_COLORS="mt=01;34" grep --color=always 'keyword2'
che evidenzierà keyword2 in blu. La mt
parte indica che grep
evidenzierà il testo corrispondente usando questo codice CSI e 01;34
significa "primo piano blu in grassetto su sfondo normale".
grep -R --color=always keyword1 . | grep keyword2
dovrebbe funzionare. Stai reindirizzando nuovamente l'output (ad esempio eseguendo il piping del secondo grep
in less -R
)? In tal caso, dovrai aggiungere anche --color=always
al secondo.
--color=auto
sarebbe necessario per il secondo grep
, subito dopo 'keyword2'
.
--color=always
la risposta, perché potresti voler convogliarla less
o qualcosa del genere.
Prova le espressioni regolari effettive, anziché eseguire il piping a un'altra istanza di grep
, ad esempio:
grep -E "\<foo\>.*\<bar\>" file
Questo limita le linee corrispondenti in cui questo corrisponde solo alle parole chiave in questo ordine, sfortunatamente. Comunque, l'uso di grep
nella tua domanda è piuttosto inefficiente e dovresti evitarlo. La risposta di @DanielH è probabilmente molto più semplice per il tuo caso, probabilmente.
Per una corrispondenza "o" di parole chiave, lo uso regolarmente:
grep -E "(foo|bar)" file
foo.*bar|bar.*foo
, o se è persino necessario per questo caso (che sembra essere un file di registro che probabilmente avrebbe un ordine standard per le parole chiave). Ho aggiunto la mia risposta prima che tu abbia aggiornato la tua, ma la terrò in giro nel caso in cui ci sia una situazione in cui grep
sono davvero necessari concatenati (o qualsiasi altra volta che l'output colorato non dovrebbe essere inviato al terminale, come grep | less -R
).