Сохранить цвет окраски после 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
: http://mywiki.wooledge.org/ParsingLs - Сила
glob
s: http://mywiki.wooledge.org/glob
Вы должны проверить, действительно ли вы используете "настоящие" ls, просто вызвав двоичный файл:
/bin/ls ....
Потому что: код, который вы описали, действительно должен работать, если только ls игнорирует --color= всегда по какой-то странной причине или ошибке.
Я подозреваю, что некоторые псевдоним или функция, которая добавляет (напрямую или через переменную) некоторые параметры. Дважды проверьте, что это не так.