Сохранить цвет окраски после grep'ing

Если я сделаю

$ ls -l --color=always

Я получаю список файлов внутри каталога с приятной раскраской для разных типов файлов и т.д..

Теперь я хочу иметь возможность передать цветной вывод ls через grep отфильтровать некоторые файлы, которые мне не нужны. Ключ в том, что я все еще хочу сохранить цвет после фильтра grep.

$ ls -l --color=always | grep -E some_regex

^ Я теряю окраску после grep

РЕДАКТИРОВАТЬ: я использую безголовый сервер Ubuntu 8.10, Bash 3.2.39, в значительной степени стандартная установка без каких-либо модных конфигов

2 ответа

Решение

Ваш grep, вероятно, удаляет ls Цветовые коды, потому что он имеет свою собственную раскраску.

Вы могли бы сделать это:

ls -l --color=always | grep --color=never pattern

Однако очень важно, чтобы вы поняли, что именно вы grep пинг здесь. Не только grep пинг ls ненужный (используйте glob вместо этого), этот частный случай grep проверять не только имена файлов и статистику файлов, но и коды цветов, добавленные ls!

Реальный ответ на ваш вопрос: не grep Это. Там никогда не нужно трубу ls во что-нибудь или захватить его вывод. ls предназначен только для интерпретации человеком (например, смотреть только в интерактивной оболочке, и для этой цели, конечно, очень удобно). Как упоминалось ранее, вы можете фильтровать какие файлы ls перечисляет, используя globs:

ls -l *.txt      # Show all files with filenames ending with `.txt'.
ls -l !(foo).txt # Show all files with filenames that end on `.txt' but aren't `foo.txt'. (This requires `shopt -s extglob` to be on, you can put it in ~/.bashrc)

Я настоятельно рекомендую вам прочитать эти два превосходных документа по этому вопросу:

Вы должны проверить, действительно ли вы используете "настоящие" ls, просто вызвав двоичный файл:

/bin/ls ....

Потому что: код, который вы описали, действительно должен работать, если только ls игнорирует --color= всегда по какой-то странной причине или ошибке.

Я подозреваю, что некоторые псевдоним или функция, которая добавляет (напрямую или через переменную) некоторые параметры. Дважды проверьте, что это не так.

Другие вопросы по тегам