Mam polecenie, które generuje dane wyjściowe w kolorze, i chciałbym przesłać je do pliku z usuniętymi kodami kolorów. Czy istnieje takie polecenie, które działa tak cat
, że usuwa kody kolorów? Planuję zrobić coś takiego:
$ command-that-produces-colored-output | stripcolorcodes > outfile
isatty(stdin)
przedtem. Chcesz podzielić się tym, czym jest ten program?cat
- szybki test, który przeprowadziłem,grep --color=auto myusername /etc/passwd
daje mi moją nazwę użytkownika w kolorze czerwonym z białym tekstem w innym przypadku.grep --color=auto myusername /etc/passwd | cat
daje mi zwykły biały tekstgrep --color=auto
pozwala uniknąć tworzenia kolorowych wydruków, gdy standardowe wyjście nie jest terminalem. Mówię o poleceniu, które bezwarunkowo wyświetla kody kolorów. (Jak podkreśla Alex powyżej, takie zachowanie jest prawdopodobnie błędem, ale czasami musimy pracować z niedoskonałym oprogramowaniem, którego sami nie jesteśmy w stanie łatwo naprawić, i o to właśnie chodzi.)Odpowiedzi:
Można by pomyśleć, że byłoby na to narzędzie, ale nie mogłem go znaleźć. Jednak ten liniowiec Perl powinien załatwić sprawę:
Przykład:
Lub, jeśli chcesz skrypt, możesz zapisać jako
stripcolorcodes
:Jeśli chcesz usunąć tylko kody kolorów i pozostawić wszystkie inne kody ANSI (np. Ruch kursora) w spokoju, użyj
zamiast podstawienia, którego użyłem powyżej (który usuwa wszystkie kody specjalne ANSI).
źródło
Term::ANSIColor
. Podaj swoje źródła, proszę!Usuń kody kolorów (znaki specjalne) za pomocą GNU sed
Lub
Usuń sekwencje specjalne ANSI w Pythonie
Zainstaluj pakiet colorama python (
pip install colorama
). Umieść wstripcolorcodes
:Uruchom
chmod +x stripcolorcodes
.źródło
sed
robi wrażenie :)Jeśli możesz zainstalować moduł Term :: ANSIColor , ten skrypt perla działa:
źródło
perl -mTerm::ANSIColor=colorstrip -n -e 'print colorstrip $_'
Jeśli system ma dostęp do NodeJS można zainstalować następujący pakiet węźle
strip-ansi-cli
.Następnie możesz uruchomić polecenie tak:
źródło
To polecenie sed zrobiło to dla mnie:
Przykład:
źródło
sed
.Możesz do tego użyć ac . Powinno być szybsze niż cokolwiek wymienionego powyżej (choć
perl
ised
powinno być przyzwoite). Oto przykład:Jako wyłączenie odpowiedzialności: funkcja filtrowania kolorów została napisana przeze mnie.
źródło
ac
Program wydaje się być tutaj: hub.darcs.net/vmchale/fastcat... a jeśli to konieczne,
(dnf, ...) install ansifilter
źródło