Como manter a saída colorida usando sed

10

Estou usando o sedcomando 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'
Johniak
fonte

Respostas:

13

No macOS, o lsnão é GNU lse não aceita a --color=alwaysopçã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 : $CLICOLORe $CLICOLOR_FORCE. Se o primeiro for definido, o terminal especificado por $TERMsuporta cores e a saída é para um terminal, então essa saída será colorida, como a --color=autoopçã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'
Raposa
fonte
O macOS lstambém tem a -Gopção de ativar a cor, mas não tenho certeza de como ela se comporta em um pipeline.
precisa saber é o seguinte
2
@ 8bittree Passing -Gé equivalente a definir $CLICOLOR(e, portanto, não suficiente)
Fox
6

Vou cegamente acho que a sua distribuição, como muitos, tem um alias que mapeia lspara ls --color=auto. ls -la --color=always | sed …Deveria trabalhar.

(A autoconfiguração faz, de um modo geral, lsverificar 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.)

Ulrich Schwarz
fonte
3
O palpite cego está errado. OSX não é uma distribuição Linux e não usa a userland GNU
Fox