Respostas:
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'
-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
para ls --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.)
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.