Cómo mantener la salida coloreada usando sed

10

Estoy usando el sedcomando y quiero mantener la salida en color del comando anterior. La salida de lses de color, pero la salida de sed no lo es. Estoy usando OSX.

ls -la | sed -En  '/Desktop/q;p'
Johniak
fuente

Respuestas:

13

En macOS, lsno es GNU lsy no acepta la --color=alwaysopción que los usuarios de Linux pueden esperar para esta funcionalidad.

En la versión de macOS de ls, los colores están controlados por dos variables : $CLICOLORy $CLICOLOR_FORCE. Si se define el primero, el terminal especificado por el $TERMcolor soporta, y la salida es a un terminal, entonces esta salida será coloreada, al igual que la --color=autoopción de GNU . Si la última variable también se define, la condición final se descarta, comportándose como las GNU --color=always.

Por lo tanto, para pasar el color sed, necesitaría algo como lo siguiente:

CLICOLOR_FORCE=1 ls -la | sed -En '/Desktop/q;p'
zorro
fuente
macOS también lstiene la -Gopción de habilitar el color, pero no estoy seguro de cómo se comporta en una tubería.
8bittree
2
@ 8bittree Passing -Ges equivalente a definir $CLICOLOR(y por lo tanto no es suficiente)
Fox
6

Voy a ciegas adivinar que su distribución, como muchos, tiene un alias que se asigna lsa ls --color=auto. ls -la --color=always | sed …Deberia trabajar.

(La autoconfiguración hace, en términos generales, lsverificar si su salida va a la pantalla o no, y solo el color para la pantalla. La razón de esto es que el color se realiza mediante secuencias de escape, es decir, caracteres de comando invisibles, por lo que un programa podría confundirlos para parte del nombre del archivo, cosas así)

Ulrich Schwarz
fuente
3
La suposición ciega está mal. OSX no es una distribución de Linux y no utiliza un espacio de usuario de GNU
Fox