GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Entfernen von Steuerzeichen (einschließlich Konsolencodes/-farben) aus der Skriptausgabe?

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;
}

Linux
  1. Erkennen, ob die Taste aus dem Skript gedrückt wird?

  2. Führen Sie das Bash-Skript von der URL aus

  3. Linux-Konsolenausgabe an eine Protokolldatei anhängen?

  4. Ausführen eines Python-Skripts von PHP

  5. Wie kann ich die Ausgabe von grep an cp weiterleiten?

Ausgabe von Sensoren einfärben?

Wie kann man die Ausgabe eines Php-Skripts sehen?

Farbige Shell-Script-Ausgabebibliothek

Führen Sie ein Skript von überall aus

Wie man /dev/fb0 als Konsole aus dem Userspace verwendet oder Text darauf ausgibt

grep-Ausgabe von lang nach breit