Jeśli użyję dwóch kolejnych greppoleceń, 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 greppoleceń, 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.
grepwykrywa, 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, 2013a foo.
grep --color=always ID file | grep 2013 | grep foo
pokolorować IDi 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 .bashrcitp., ale nie, chyba że z jakiegoś powodu naprawdę rozumiesz implikacje i nadal chcesz to zrobić. Pod wieloma względami pękłby z greppowodu wspomnianego wyżej faktu 1 .
Dodaj, aliasjeśli często go używasz.
alias cgrep='grep --color=always'
GREP_OPTIONSi --color wziąć trzy opcje : never, autoi always. Dwa pierwsze powinny być jedynymi rozważanymi GREP_OPTIONS.
Możesz także sprawdzić GREP_COLORSna manstronach lub w gnu grep .
export GREP_OPTIONS="--color=always"w .bashrc ustawia domyślne opcje dla dowolnych greps, a ty prawie to przybiłeś!