Як зберегти кольоровий вихід за допомогою sed


10

Я використовую sedкоманду, і хочу зберегти кольоровий вихід з попередньої команди. Вихід lsкольору кольоровий, але вихід sed не є. Я використовую OSX.

ls -la | sed -En  '/Desktop/q;p'

Відповіді:


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 Passing -Gеквівалентний визначенню $CLICOLOR(і тому недостатній)
Фокс

6

Я сліпо припустити , що ваш дистрибутив, як і багато інші , має псевдонім , який відображає lsдо ls --color=auto. ls -la --color=always | sed …повинні працювати.

(Цей autoпараметр змушує lsперевіряти, чи відповідає його вихід на дисплей чи ні, і лише колір для дисплея. Причиною цього є те, що колір реалізується за допомогою послідовностей евакуації, тобто невидимих ​​символів команд, тому програма може заплутати їх для частини імені файлу, подібних речей.)


3
Сліпа здогадка неправильна. OSX не є дистрибутивом Linux і не використовує
Fox
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.