Я использую sed
команду и хочу сохранить цветной вывод предыдущей команды. Выходные данные ls
окрашены, но выходные данные sed - нет. Я использую OSX.
ls -la | sed -En '/Desktop/q;p'
В 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'
ls
есть-G
возможность включить цвет, но я не уверен, как он ведет себя в конвейере.-G
эквивалентна определению$CLICOLOR
(и, следовательно, не достаточно)Я буду слепо догадываться, что у вашего дистрибутива, как и у многих, есть псевдоним, который отображается
ls
наls --color=auto
.ls -la --color=always | sed …
должно сработать.(
auto
Вообще говоря, параметрls
проверяет, поступает ли его вывод на дисплей или нет, и только цвет для дисплея. Причина этого в том, что цвет реализуется с помощью escape-последовательностей, то есть невидимых командных символов, поэтому программа может их запутать для части имени файла, такие вещи.)источник