Как сохранить цветной вывод используя sed

10

Я использую sedкоманду и хочу сохранить цветной вывод предыдущей команды. Выходные данные lsокрашены, но выходные данные sed - нет. Я использую OSX.

ls -la | sed -En  '/Desktop/q;p'
Johniak
источник

Ответы:

13

В 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'
Лиса
источник
У macOS lsесть -Gвозможность включить цвет, но я не уверен, как он ведет себя в конвейере.
8bittree
2
@ 8bittree Передача -Gэквивалентна определению $CLICOLOR(и, следовательно, не достаточно)
Фокс
6

Я буду слепо догадываться, что у вашего дистрибутива, как и у многих, есть псевдоним, который отображается lsна ls --color=auto. ls -la --color=always | sed …должно сработать.

( autoВообще говоря, параметр lsпроверяет, поступает ли его вывод на дисплей или нет, и только цвет для дисплея. Причина этого в том, что цвет реализуется с помощью escape-последовательностей, то есть невидимых командных символов, поэтому программа может их запутать для части имени файла, такие вещи.)

Ульрих Шварц
источник
3
Слепое предположение неверно. OSX не является дистрибутивом Linux и не использует GNU userland
Fox