Se utilizzo due grep
comandi consecutivi , ad esempio:
echo "foo bar" | grep foo | grep bar
Quindi il primo motivo ("pippo") non è evidenziato. In effetti, sembra che grep rimuova i codici colore dal suo input. C'è un modo per impedirlo?
Se utilizzo due grep
comandi consecutivi , ad esempio:
echo "foo bar" | grep foo | grep bar
Quindi il primo motivo ("pippo") non è evidenziato. In effetti, sembra che grep rimuova i codici colore dal suo input. C'è un modo per impedirlo?
Risposte:
Usa --color=always
.
grep
rileva se l'output è in una pipe (o file). La maggior parte dei colori non è mai richiesta quando l'output deve essere archiviato, poiché si tratta di sequenze di escape per il terminale. Tipicamente:
foo ^[[01;31m^[[Kbar^[[m^[[K
da es:
grep pattern file > result
Per ignorare l'uso --color=always
.
grep --color=always pattern file | ...
Esempio:
Avendo file:
ID=111;Year=2013;foo=bar
ID=222;Year=2013;foo=baz
Poi
grep --color=always ID file | grep --color=always 2013 | grep foo
colora ID
, 2013
e foo
.
grep --color=always ID file | grep 2013 | grep foo
colorerebbe ID
e foo
, ma non 2013
.
1 Importante: devi anche ricordare che il disordine aggiuntodai colori viene passato al comando successivo nella catena. Una volta che l'ID è colorato, non puoi (con facilità), abbinare ad esID=111
.
In alcune occasioni si potrebbero desiderare colori terminali nel file . Prova ad es
grep --color=always foo file > result
cat result
Sebbene il file risultante avrebbe una portabilità molto limitata.
La colorazione stessa è anche un'estensione.
Come accennato dal buon @slm , è possibile aggiungere:
export GREP_OPTIONS="--color=always"
al tuo .bashrc
ecc., ma non farlo a meno che tu per qualche motivo non capisca davvero le implicazioni e desideri ancora farlo. In molti modi si spezzerebbe a grep
causa del fatto di cui sopra 1 .
Aggiungi un alias
se lo usi spesso.
alias cgrep='grep --color=always'
GREP_OPTIONS
e --color
prendere tre opzioni : never
, auto
e always
. I primi due dovrebbero essere gli unici considerati GREP_OPTIONS
.
Si potrebbe anche verificare GREP_COLORS
nelle man
pagine o GNU grep .
export GREP_OPTIONS="--color=always"
in un .bashrc le opzioni sono quelle predefinite per qualsiasi greps, e tu l'hai praticamente inchiodato!