Jeśli użyję dwóch kolejnych grep
poleceń, np .:
echo "foo bar" | grep foo | grep bar
Wtedy pierwszy wzór („foo”) nie jest podświetlony. W rzeczywistości wydaje się, że grep usuwa kody kolorów z jego danych wejściowych. Czy można temu zapobiec?
Jeśli użyję dwóch kolejnych grep
poleceń, np .:
echo "foo bar" | grep foo | grep bar
Wtedy pierwszy wzór („foo”) nie jest podświetlony. W rzeczywistości wydaje się, że grep usuwa kody kolorów z jego danych wejściowych. Czy można temu zapobiec?
Odpowiedzi:
Zastosowanie --color=always
.
grep
wykrywa, czy dane wyjściowe są przesyłane do potoku (lub pliku). Większość nigdy nie chce kolorów, gdy dane wyjściowe są zapisywane - ponieważ są to sekwencje specjalne dla terminala. Zazwyczaj:
foo ^[[01;31m^[[Kbar^[[m^[[K
z np .:
grep pattern file > result
Aby zastąpić użycie --color=always
.
grep --color=always pattern file | ...
Przykład:
Mając plik:
ID=111;Year=2013;foo=bar
ID=222;Year=2013;foo=baz
Następnie
grep --color=always ID file | grep --color=always 2013 | grep foo
by pokolorować ID
, 2013
a foo
.
grep --color=always ID file | grep 2013 | grep foo
pokolorować ID
i foo
, ale nie 2013
.
1 Ważne: Musisz także pamiętać, że dodany bałagan z kolorów jest przekazywany do następnego polecenia w łańcuchu. Po pokolorowaniu identyfikatora nie można (z łatwością) dopasować npID=111
.
Przy niektórych okazjach może być potrzebne kolory terminala w pliku . Spróbuj np
grep --color=always foo file > result
cat result
Chociaż wynikowy plik miałby bardzo ograniczoną przenośność.
Samo zabarwienie jest również przedłużeniem.
Jak wspomniano w good @slm , możesz dodać:
export GREP_OPTIONS="--color=always"
do twojego .bashrc
itp., ale nie, chyba że z jakiegoś powodu naprawdę rozumiesz implikacje i nadal chcesz to zrobić. Pod wieloma względami pękłby z grep
powodu wspomnianego wyżej faktu 1 .
Dodaj, alias
jeśli często go używasz.
alias cgrep='grep --color=always'
GREP_OPTIONS
i --color
wziąć trzy opcje : never
, auto
i always
. Dwa pierwsze powinny być jedynymi rozważanymi GREP_OPTIONS
.
Możesz także sprawdzić GREP_COLORS
na man
stronach lub w gnu grep .
export GREP_OPTIONS="--color=always"
w .bashrc ustawia domyślne opcje dla dowolnych greps, a ty prawie to przybiłeś!