Estoy usando el sed
comando y quiero mantener la salida en color del comando anterior. La salida de ls
es de color, pero la salida de sed no lo es. Estoy usando OSX.
ls -la | sed -En '/Desktop/q;p'
En macOS, ls
no es GNU ls
y no acepta la --color=always
opció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 : $CLICOLOR
y $CLICOLOR_FORCE
. Si se define el primero, el terminal especificado por el $TERM
color soporta, y la salida es a un terminal, entonces esta salida será coloreada, al igual que la --color=auto
opció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'
ls
tiene la-G
opción de habilitar el color, pero no estoy seguro de cómo se comporta en una tubería.-G
es equivalente a definir$CLICOLOR
(y por lo tanto no es suficiente)Voy a ciegas adivinar que su distribución, como muchos, tiene un alias que se asigna
ls
als --color=auto
.ls -la --color=always | sed …
Deberia trabajar.(La
auto
configuración hace, en términos generales,ls
verificar 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í)fuente