Streifenfarbe unter OS X mit BSD sed (oder einem anderen Tool)


8

Ich bin unter OS X, das eine BSD-Version von hat sed(von der ich vermute, dass sie einer GNU-Version unter Linux unterlegen ist), und alle Techniken zum Entfernen von Farbe auf commandlinefu.com haben nicht funktioniert. Ich habe versucht, den -rSwitch (unter OS X nicht vorhanden) durch zu ersetzen -e, aber das hat nicht geholfen.

Gibt es eine zuverlässige Möglichkeit, Farbformatierungscodes unter OS X zu entfernen? Hier ist der Befehl, den ich ausführe und dessen Farbausgabe entfernt werden muss:

for concurrency in $(seq 1 50); do siege -f urls.txt -c $concurrency -t 5m >> results.csv ; done

und hier ist ein Beispiel für den Versuch, seddie Farbe aus der CSV-Ausgabe zu entfernen:

for concurrency in $(seq 1 50); do siege -f urls.txt -c $concurrency -t 5m | sed "s,\x1B\[[0-9;]*[a-zA-Z],,g" >> results.csv ; done

Antworten:


15

Mit bash sollte dies angemessene Argumente liefern, denke ich:

sed $'s,\x1b\\[[0-9;]*[a-zA-Z],,g'

Oder, tragbarer für andere Muscheln, könnten Sie versuchen:

sed "s,$(printf '\033')\\[[0-9;]*[a-zA-Z],,g"

Oder fügen Sie einfach ein Escape-Byte direkt in die Zeichenfolge ein, indem Sie tippen Ctrl-vEscanstatt zu tippen \x1b.

Beachten Sie jedoch, dass diese sed-Anweisung möglicherweise mehr als nur Farbcodes entfernt - sie kann mit vielen Kontrollsequenzen übereinstimmen, die mit einer CSI beginnen. Suchen Sie auf dieser Seite nach "CSI" , um eine Vorstellung davon zu erhalten, welche anderen Kontrollsequenzen entfernt (oder möglicherweise entstellt) werden.


1
Die Bash-Version funktionierte ohne Anpassungen: Sie verdienen mehr Upvotes als alle Leute auf commandlinefu.com!
Bilderstürmer
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.