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'
Johniak
źródło

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'
Lis
źródło
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.)

Ulrich Schwarz
źródło
3
Niewidome zgadywanie jest błędne. OSX nie jest dystrybucją Linuksa i nie korzysta z przestrzeni użytkownika GNU
Fox