Подтвердить что ты не робот

Сохранять окраску после трубопровода grep до grep

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

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

4b9b3361

Ответ 1

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

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

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

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

alias cgrep="grep --color=always"

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

Ответ 2

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

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

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

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

Ответ 3

хотя бит "hack-ish", он также работает, чтобы просто повторить команду grep в конце вашего канала.
grep WORD * | grep -v AVOID | grep WORD