Ich habe ein Skript, das Farben erzeugt und ich muss es loswerden.Entfernen von Farben aus der Ausgabe
#!/bin/bash
exec > >(tee log) # redirect the output to a file but keep it on stdout
exec 2>&1
./somescript
Der Ausgang ist (in Log-Datei):
java (pid 12321) is [email protected][60G[@[0;32m OK @[0;39m]
Ich wusste nicht, wie die ESC-Zeichen hier setzen, so dass ich @
an seinem Platz.
änderte ich das Skript in:
#!/bin/bash
exec > >(tee log) # redirect the output to a file but keep it on stdout
exec 2>&1
./somescript | sed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g"
Aber jetzt gibt es mir (in Log-Datei):
java (pid 12321) is [email protected][60G[ OK ]
Wie kann ich entfernen auch diese '@[60G
?
Vielleicht gibt es eine Möglichkeit, Farbgebung für das gesamte Skript vollständig zu deaktivieren?
BSD/OSX Benutzer: Wir haben normalerweise nicht die Option -r auf sed. 'brew install gnu-sed' installiert eine fähige Version. Lauf mit 'gsed'. –
Wenn ich "Echo" $ (tput setaf 1) foo $ (tput sgr0) bar "| sed -r "s/\ x1B \ [([0-9] {1,2} (; [0-9] {1,2})?)? [mGK] // g" | cat -A ', bekomme ich: 'foo^O bar $' Also ich denke, einige Zeichen werden nicht korrekt entfernt, oder? Weißt du, wie man korrigiert? – edi9999
@ edi9999 Soweit ich das beurteilen kann, besteht der Unterschied darin, dass Farbeinstellungen jenseits von 16 Farben (wie 'setaf' unterstützt) mehr Parameter als nur zwei erfordern; Meine Regex unterstützt zwei. Das Ändern des ersten '?' Out für '*' sollte helfen. Die Handhabung von 'sgr0' ist möglich, aber basierend auf einer Suche wird es wahrscheinlich außerhalb des Bereichs dieser Hacky-Regex-basierten Antwort liegen. –