Ответы:
В macOS lsэто не GNU lsи не принимает --color=alwaysопцию, которую пользователи Linux могут ожидать от этой функциональности.
В версии macOS lsцвета управляются двумя переменными : $CLICOLORи $CLICOLOR_FORCE. Если первый определен, терминал, заданный параметром, $TERMподдерживает цвет, а вывод - к терминалу, то этот вывод будет цветным, очень похоже на --color=autoопцию GNU . Если последняя переменная также определена, конечное условие отбрасывается и ведет себя как GNU --color=always.
Таким образом, чтобы передать цвет sed, вам нужно что-то вроде следующего:
CLICOLOR_FORCE=1 ls -la | sed -En '/Desktop/q;p'
-Gэквивалентна определению $CLICOLOR(и, следовательно, не достаточно)
Я буду слепо догадываться, что у вашего дистрибутива, как и у многих, есть псевдоним, который отображается lsна ls --color=auto. ls -la --color=always | sed …должно сработать.
( autoВообще говоря, параметр lsпроверяет, поступает ли его вывод на дисплей или нет, и только цвет для дисплея. Причина этого в том, что цвет реализуется с помощью escape-последовательностей, то есть невидимых командных символов, поэтому программа может их запутать для части имени файла, такие вещи.)
lsесть-Gвозможность включить цвет, но я не уверен, как он ведет себя в конвейере.