Сохранять окраску после трубопровода grep до grep
В возникает проблема сохранения цвета ls после greping, но меня раздражает то, что если вы печатаете цветной grep-вывод в другой grep, то окраска не сохраняется.
В качестве примера grep --color WORD * | grep -v AVOID
не сохраняется цвет первого вывода. Но для меня ls | grep FILE
сохранить цвет, почему разница?
Ответы
Ответ 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