Réponses:
Sous macOS, le ls
n'est pas GNU ls
et n'accepte pas l' --color=always
option que les utilisateurs Linux peuvent attendre pour cette fonctionnalité.
Dans la version macOS de ls
, les couleurs sont contrôlées par deux variables : $CLICOLOR
et $CLICOLOR_FORCE
. Si le premier est défini, le terminal spécifié par $TERM
prend en charge la couleur et la sortie est vers un terminal, alors cette sortie sera colorée, tout comme l' --color=auto
option de GNU . Si cette dernière variable est également définie, la condition finale est supprimée, se comportant comme les GNU --color=always
.
Donc, pour que la couleur passe à travers sed
, vous auriez besoin de quelque chose comme ceci:
CLICOLOR_FORCE=1 ls -la | sed -En '/Desktop/q;p'
-G
équivaut à définir $CLICOLOR
(et donc pas suffisant)
Je devine aveuglément que votre distribution, comme beaucoup, a un alias qui correspond ls
à ls --color=auto
. ls -la --color=always | sed …
devrait marcher.
(Le auto
paramètre permet, d'une manière générale, de ls
vérifier si sa sortie est affichée ou non, et uniquement la couleur de l'affichage. La raison en est que la couleur est réalisée par des séquences d'échappement, c'est-à-dire des caractères de commande invisibles, donc un programme peut les confondre pour une partie du nom de fichier, des choses comme ça.)
ls
également la-G
possibilité d'activer la couleur, mais je ne sais pas comment elle se comporte dans un pipeline.