Estou usando o sed
comando e quero manter a saída colorida do comando anterior. A saída de ls
é colorida, mas a saída de sed não é. Estou usando o OSX.
ls -la | sed -En '/Desktop/q;p'
No macOS, o ls
não é GNU ls
e não aceita a --color=always
opção que os usuários do Linux podem esperar para essa funcionalidade.
Na versão do macOS ls
, as cores são controladas por duas variáveis : $CLICOLOR
e $CLICOLOR_FORCE
. Se o primeiro for definido, o terminal especificado por $TERM
suporta cores e a saída é para um terminal, então essa saída será colorida, como a --color=auto
opção do GNU . Se a última variável também for definida, a condição final será eliminada, comportando-se como as GNU --color=always
.
Portanto, para passar a cor sed
, você precisaria de algo como o seguinte:
CLICOLOR_FORCE=1 ls -la | sed -En '/Desktop/q;p'
ls
também tem a-G
opção de ativar a cor, mas não tenho certeza de como ela se comporta em um pipeline.-G
é equivalente a definir$CLICOLOR
(e, portanto, não suficiente)Vou cegamente acho que a sua distribuição, como muitos, tem um alias que mapeia
ls
parals --color=auto
.ls -la --color=always | sed …
Deveria trabalhar.(A
auto
configuração faz, de um modo geral,ls
verificar se a saída vai para a tela ou não, e apenas cores para a tela. A razão disso é que a cor é realizada por seqüências de escape, ou seja, caracteres de comando invisíveis, para que um programa possa confundi-las. para parte do nome do arquivo, coisas assim.)fonte