Ich kann den Befehl „script“ verwenden, um eine interaktive Sitzung in der Befehlszeile aufzuzeichnen. Dies schließt jedoch alle Steuerzeichen und ein Farbcodes. Ich kann Steuerzeichen (wie Backspace) mit „col -b“ entfernen, aber ich finde keine einfache Möglichkeit, die Farbcodes zu entfernen.
Beachten Sie, dass ich die Befehlszeile ganz normal verwenden möchte, also Farben dort nicht deaktivieren möchte – ich möchte sie nur aus der Skriptausgabe entfernen. Ich weiß auch, dass ich herumspielen und versuchen kann, einen regulären Ausdruck zu finden, um die Dinge zu reparieren, aber ich hoffe, es gibt eine einfachere (und zuverlässigere – was ist, wenn es einen Code gibt, von dem ich nichts weiß, wenn ich den regulären Ausdruck entwickle?) Lösung.
So zeigen Sie das Problem:
spl62 tmp: script Script started, file is typescript spl62 lepl: ls add-licence.sed build-example.sh commit-test push-docs.sh add-licence.sh build.sh delete-licence.sed setup.py asn build-test.sh delete-licence.sh src build-doc.sh clean doc-src test.ini spl62 lepl: exit Script done, file is typescript spl62 tmp: cat -v typescript Script started on Thu 09 Jun 2011 09:47:27 AM CLT spl62 lepl: ls^M ^[[0m^[[00madd-licence.sed^[[0m ^[[00;32mbuild-example.sh^[[0m ^[[00mcommit-test^[[0m ^[[00;32mpush-docs.sh^[[0m^M ^[[00;32madd-licence.sh^[[0m ^[[00;32mbuild.sh^[[0m ^[[00mdelete-licence.sed^[[0m ^[[00msetup.py^[[0m^M ^[[01;34masn^[[0m ^[[00;32mbuild-test.sh^[[0m ^[[00;32mdelete-licence.sh^[[0m ^[[01;34msrc^[[0m^M ^[[00;32mbuild-doc.sh^[[0m ^[[00;32mclean^[[0m ^[[01;34mdoc-src^[[0m ^[[00mtest.ini^[[0m^M spl62 lepl: exit^M Script done on Thu 09 Jun 2011 09:47:29 AM CLT spl62 tmp: col -b < typescript Script started on Thu 09 Jun 2011 09:47:27 AM CLT spl62 lepl: ls 0m00madd-licence.sed0m 00;32mbuild-example.sh0m 00mcommit-test0m 00;32mpush-docs.sh0m 00;32madd-licence.sh0m 00;32mbuild.sh0m 00mdelete-licence.sed0m 00msetup.py0m 01;34masn0m 00;32mbuild-test.sh0m 00;32mdelete-licence.sh0m 01;34msrc0m 00;32mbuild-doc.sh0m 00;32mclean0m 01;34mdoc-src0m 00mtest.ini0m spl62 lepl: exit Script done on Thu 09 Jun 2011 09:47:29 AM CLT
Akzeptierte Antwort:
Das folgende Skript sollte alle ANSI/VT100/xterm-Steuersequenzen für (basierend auf ctlseqs) herausfiltern. Minimal getestet, bitte melden Sie jede Unter- oder Überanpassung.
#!/usr/bin/env perl
## uncolor — remove terminal escape sequences such as color changes
while (<>) {
s/ e[ #%()*+-./]. |
e[ [ -?]* [@-~] | # CSI ... Cmd
e] .*? (?:e\|[ax9c]) | # OSC ... (ST|BEL)
e[P^_] .*? (?:e\|x9c) | # (DCS|PM|APC) ... ST
e. //xg;
print;
}
Bekannte Probleme:
- Beschwert sich nicht über fehlerhafte Sequenzen. Dafür ist dieses Skript nicht da.
- Mehrzeilige String-Argumente für DCS/PM/APC/OSC werden nicht unterstützt.
- Bytes im Bereich 128–159 können als Steuerzeichen geparst werden, obwohl dies selten verwendet wird. Hier ist eine Version, die Nicht-ASCII-Steuerzeichen analysiert (dies wird Nicht-ASCII-Text in einigen Kodierungen einschließlich UTF-8 verstümmeln).
#!/usr/bin/env perl
## uncolor — remove terminal escape sequences such as color changes
while (<>) {
s/ e[ #%()*+-./]. |
(?:e[|x9b) [ -?]* [@-~] | # CSI ... Cmd
(?:e]|x9d) .*? (?:e\|[ax9c]) | # OSC ... (ST|BEL)
(?:e[P^_]|[x90x9ex9f]) .*? (?:e\|x9c) | # (DCS|PM|APC) ... ST
e.|[x80-x9f] //xg;
print;
}