Сохранить окраску после обвязки grep в grep - PullRequest
128 голосов
/ 24 февраля 2010

В есть вопрос о симларе. Сохраняйте ls-раскраску после grep’ing , но меня раздражает, что если вы перенаправляете вывод grep в другой grep, раскраска не сохраняется.

В качестве примера grep --color WORD * | grep -v AVOID не сохраняет цвет первого вывода. Но для меня ls | grep FILE сохранить цвет, почему разница?

Ответы [ 3 ]

144 голосов
/ 24 февраля 2010

grep иногда отключает вывод цвета, например, при записи в канал. Вы можете переопределить это поведение с помощью grep --color=always

Правильная командная строка будет

grep --color=always WORD * | grep -v AVOID

Это довольно многословно, в качестве альтернативы вы можете просто добавить строку

alias cgrep="grep --color=always"

к вашему .bashrc, например, и используйте cgrep в качестве цветного grep. При переопределении grep вы можете столкнуться с проблемами со сценариями, которые опираются на определенный вывод grep и не любят escape-код ascii.

71 голосов
/ 04 октября 2011

Совет:

При использовании grep --color=always фактические строки, передаваемые в следующий канал, будут изменены. Это может привести к следующей ситуации:

$ grep --color=always -e '1' * | grep -ve '12'
11
12
13

Несмотря на то, что опция -ve '12' должна исключать среднюю строку, этого не произойдет, поскольку между 1 и 2.

имеются цветные символы
7 голосов
/ 29 марта 2016

Просто повторите ту же команду grep в конце вашей трубы.
grep WORD * | grep -v AVOID | grep -v AVOID2 | grep WORD

...