Ваш grep, вероятно, удаляет цветовые коды ls
, потому что у него включена собственная окраска.
Вы могли бы сделать это:
ls -l --color=always | grep --color=never pattern
Однако очень важно, чтобы вы понимали, что именно вы grep
пингуете здесь. Не только 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)
Я очень рекомендую прочитать два превосходных документа по этому вопросу: