Preserve ls coloração após grep'ing
Pergunta
Se eu fizer
$ ls -l --color=always
Eu recebo uma lista de arquivos dentro do diretório com alguma coloração agradável para diferentes tipos de arquivos etc ..
Agora, eu quero ser capaz de canalizar a saída de cor de ls
através grep
para filtrar alguns arquivos que eu não preciso. A chave é que eu ainda quero preservar a coloração após o filtro grep.
$ ls -l --color=always | grep -E some_regex
^ I perder a coloração após grep
EDIT: Estou usando headless-servidor Ubuntu 8.10, Bash 3.2.39, praticamente um estoque instalar sem fantasia configurações
Solução
Seu grep é provavelmente remover códigos de cores do ls
porque tem a sua própria coloração ligado.
Você "poderia" fazer isso:
ls -l --color=always | grep --color=never pattern
No entanto, é muito importante que você entenda o que exatamente você está grep
ping aqui. Não só é grep
ping ls
desnecessário (usar uma glob
vez), neste caso particular é grep
ping através não apenas nomes de arquivos e arquivos de estatísticas, mas também através dos códigos de cores adicionadas por ls
!
A verdadeira resposta à sua pergunta é: não grep
-lo. Nunca há uma necessidade de ls
tubulação em qualquer coisa ou captura sua saída. ls
destina-se apenas para a interpretação humana (ex. a olhar na em um interativa desembolsar apenas, e para este efeito, é extremamente útil, é claro). Como mencionado antes, você pode filtrar quais arquivos enumera ls
usando 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)
I altamente recomendo que você leia estes dois documentos excelentes sobre o assunto:
- Explicação da maldade de analisar
ls
: http://mywiki.wooledge.org/ParsingLs - O poder do
glob
s: http://mywiki.wooledge.org/glob
Outras dicas
Você deve verificar se você está realmente usando os ls "reais", apenas chamando diretamente o binário:
/bin/ls ....
Por causa:. O código que você descreveu realmente deve funcionar, a menos que ls ignora --color = sempre, por algum motivo estranho ou bug
Eu suspeito que alguns alias ou função que adiciona (diretamente ou através de uma variável) algumas opções. Duplo-check que este não é o caso.