Preservan ls colorear después grep'ing
Pregunta
Si lo hago
$ ls -l --color=always
consigo una lista de archivos dentro del directorio con un poco de buen color para diferentes tipos de archivos, etc ..
Ahora, yo quiero ser capaz de canalizar la salida de color de ls
través grep
para filtrar algunos archivos que no necesito. La clave es que todavía quiero preservar la coloración después del filtro grep.
$ ls -l --color=always | grep -E some_regex
^ pierdo la coloración después de grep
EDIT: Estoy usando sin cabeza-servidor de Ubuntu 8.10, Bash 3.2.39, más o menos instalar un archivo sin configuraciones de lujo
Solución
Su grep es, probablemente, la eliminación códigos de color ls
's porque tiene su propia coloración encendida.
"podría" hacer esto:
ls -l --color=always | grep --color=never pattern
Sin embargo, es muy importante que entienda exactamente lo que estás grep
de ping aquí. No sólo es glob
de ping <=> innecesaria (utilizar un <=> en su lugar), este caso particular es <=> de ping no sólo a través de los nombres de archivo y las estadísticas de archivos, sino también a través de los códigos de colores añadidos por <=>
La verdadera respuesta a su pregunta es: No se <=>. Nunca hay una necesidad de tubería <=> en cualquier cosa o capturar su salida. <=> sólo se diseñó para la interpretación humana (por ejemplo. A buscar a en un interactivo solamente la cáscara, y para ello es muy útil, por supuesto). Como se mencionó antes, puede filtrar qué archivos <=> enumera mediante el uso de globos:
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)
muy recomendamos que lea estas dos excelentes documentos sobre la materia:
- Explicación de la maldad de análisis sintáctico <=>: http://mywiki.wooledge.org/ParsingLs
- El poder de <=> s: http://mywiki.wooledge.org/glob
Otros consejos
Debe comprobar si realmente están utilizando los ls "reales", con sólo llamar directamente el binario:
/bin/ls ....
Debido a:. El código que ha descrito realmente debería funcionar, a menos que ignora ls -color = Siempre por alguna extraña razón o error
Sospecho que algunos alias o función que añade (directamente oa través de una variable) algunas opciones. Vuelva a comprobar que este no es el caso.