it-swarm.com.ru

Сохранение окраски после передачи grep в grep

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

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

127
Zitrax

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

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

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

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

alias cgrep="grep --color=always"

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

144
Otto Allmendinger

Слово совета:

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

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

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

70
andersonvom

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

7
Alex