Korzystam z sed
polecenia i chcę zachować kolorowe dane wyjściowe z poprzedniego polecenia. Wyjście ls
jest kolorowe, ale sed nie. Używam OSX.
ls -la | sed -En '/Desktop/q;p'
W systemie macOS ls
nie jest to GNU ls
i nie akceptuje --color=always
opcji, której użytkownicy Linux mogliby oczekiwać w przypadku tej funkcji.
W wersji macOS ls
kolory są kontrolowane przez dwie zmienne : $CLICOLOR
i $CLICOLOR_FORCE
. Jeśli to pierwsze jest zdefiniowane, terminal określony przez $TERM
obsługuje kolor, a dane wyjściowe są na terminalu, wówczas dane wyjściowe będą kolorowe, podobnie jak --color=auto
opcja 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'
ls
ma również-G
opcję włączenia koloru, ale nie jestem pewien, jak zachowuje się w potoku.-G
jest równoznaczne ze zdefiniowaniem$CLICOLOR
(a zatem niewystarczającym)Będę ślepo domyślić, że dystrybucja, jak wiele ma aliasu, że mapy
ls
sięls --color=auto
.ls -la --color=always | sed …
powinno działać.(
auto
Ustawienie to, ogólnie mówiąc,ls
sprawdza, 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.)źródło