Ответ 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)
Я высоко рекомендую вам прочитать эти два превосходных документа по этому вопросу:
- Объяснение плохого разбора
ls
: http://mywiki.wooledge.org/ParsingLs - Сила
glob
s: http://mywiki.wooledge.org/glob a >