Сохранять цвет ls после grep
Вопрос
Если я сделаю
$ ls -l --color=always
Я получаю список файлов внутри каталога с красивой раскраской для разных типов файлов и т. д.
Теперь я хочу иметь возможность передавать цветной вывод ls
через grep
чтобы отфильтровать некоторые файлы, которые мне не нужны.Ключ в том, что я все еще хочу сохранить цвет после фильтра grep.
$ ls -l --color=always | grep -E some_regex
^ Я теряю окраску после grep
РЕДАКТИРОВАТЬ:Я использую безголовый сервер Ubuntu 8.10, Bash 3.2.39, практически стандартную установку без каких-либо необычных конфигураций.
Решение
Ваш 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
с: http://mywiki.wooledge.org/glob
Другие советы
Вам следует проверить, действительно ли вы используете «настоящий» ls, просто вызвав двоичный файл:
/bin/ls ....
Потому что:Описанный вами код действительно должен работать, если только ls не игнорирует --color=always по какой-то странной причине или ошибке.
Я подозреваю, что это какой-то псевдоним или функция, которая добавляет (напрямую или через переменную) некоторые параметры.Еще раз проверьте, что это не так.