color all bash grep colors ls

bash - all - Conservar ls colorante después de grep''ing.



grep linux-- color (2)

Debería verificar si realmente está usando ls "reales", simplemente llamando directamente al binario:

/bin/ls ....

Porque: El código que describiste realmente debería funcionar, a menos que ls ignore --color = siempre por alguna extraña razón o error.

Sospecho que algún alias o función agrega (directamente oa través de una variable) algunas opciones. Vuelve a comprobar que este no es el caso.

Si lo hago

$ ls -l --color=always

Obtengo una lista de archivos dentro del directorio con algunos colores agradables para diferentes tipos de archivos, etc.

Ahora, quiero poder canalizar la salida de color de ls través de grep para filtrar algunos archivos que no necesito. La clave es que todavía quiero conservar el color después del filtro grep.

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

^ Pierdo el colorante después de grep.

EDITAR: Estoy usando el servidor sin cabeza Ubuntu 8.10, Bash 3.2.39, prácticamente una instalación de valores sin configuraciones extravagantes


Su grep probablemente está eliminando los códigos de color de ls porque tiene su propio color activado.

Usted "podría" hacer esto:

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

Sin embargo, es muy importante que entiendas exactamente qué estás haciendo aquí. No solo no es necesario usar grep ping ls (en su lugar, use glob ), este caso en particular es grep ping no solo a través de nombres de archivo y estadísticas de archivos, sino también a través de los códigos de color agregados por ls .

La respuesta real a tu pregunta es: no lo grep . Nunca es necesario canalizar ls en algo o capturar su salida. ls solo está destinado a la interpretación humana (por ejemplo, para ver solo en una shell interactiva , y para este propósito es extremadamente útil, por supuesto). Como se mencionó anteriormente, puede filtrar qué archivos ls enumera 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)

Le recomiendo que lea estos dos excelentes documentos al respecto:

  • Explicación de la maldad de analizar ls :
  • El poder de glob s: