Jak zachować kolorowe wydruki za pomocą sed


10

Korzystam z sedpolecenia i chcę zachować kolorowe dane wyjściowe z poprzedniego polecenia. Wyjście lsjest kolorowe, ale sed nie. Używam OSX.

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

Odpowiedzi:


13

W systemie macOS lsnie jest to GNU lsi nie akceptuje --color=alwaysopcji, której użytkownicy Linux mogliby oczekiwać w przypadku tej funkcji.

W wersji macOS lskolory są kontrolowane przez dwie zmienne : $CLICOLORi $CLICOLOR_FORCE. Jeśli to pierwsze jest zdefiniowane, terminal określony przez $TERMobsługuje kolor, a dane wyjściowe są na terminalu, wówczas dane wyjściowe będą kolorowe, podobnie jak --color=autoopcja GNU . Jeśli ta ostatnia zmienna jest również zdefiniowana, warunek końcowy jest odrzucany, zachowując się jak GNU --color=always.

Aby przejść do koloru sed, potrzebujesz czegoś takiego:

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

MacOS lsma również -Gopcję włączenia koloru, ale nie jestem pewien, jak zachowuje się w potoku.
8bittree

2
@ 8bittree Passing -Gjest równoznaczne ze zdefiniowaniem $CLICOLOR(a zatem niewystarczającym)
Fox

6

Będę ślepo domyślić, że dystrybucja, jak wiele ma aliasu, że mapy lssię ls --color=auto. ls -la --color=always | sed …powinno działać.

( autoUstawienie to, ogólnie mówiąc, lssprawdza, czy jego dane wyjściowe trafiają na ekran, czy nie, i tylko kolor na wyświetlaczu. Powodem tego jest to, że kolor jest realizowany przez sekwencje specjalne, tj. Niewidoczne znaki poleceń, więc program może je pomylić dla części nazwy pliku, takie rzeczy.)


3
Niewidome zgadywanie jest błędne. OSX nie jest dystrybucją Linuksa i nie korzysta z przestrzeni użytkownika GNU
Fox
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.