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

Сохранять окраску ls после grep'ing

Если я делаю

$ ls -l --color=always

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

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

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

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

EDIT: я использую headless-сервер Ubuntu 8.10, Bash 3.2.39, в значительной степени доступный для установки без каких-либо причудливых конфигураций

4b9b3361

Ответ 1

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

Вы "можете" сделать это:

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

Однако очень важно, чтобы вы поняли, что именно вы здесь grep ping. Не только grep ping 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)

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

Ответ 2

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

/bin/ls ....

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

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