GNU/Linux >> Tutoriels Linux >  >> Linux

Suppression des caractères de contrôle (y compris les codes/couleurs de la console) de la sortie du script ?

Je peux utiliser la commande "script" pour enregistrer une session interactive en ligne de commande. Cependant, cela inclut tous les caractères de contrôle et codes couleurs. Je peux supprimer les caractères de contrôle (comme le retour arrière) avec "col -b", mais je ne trouve pas de moyen simple de supprimer les codes de couleur.

Notez que je veux utiliser la ligne de commande de manière normale, donc je ne veux pas y désactiver les couleurs - je veux juste les supprimer de la sortie du script. De plus, je sais que je peux jouer et essayer de trouver une expression rationnelle pour arranger les choses, mais j'espère qu'il existe une solution plus simple (et plus fiable - et s'il y a un code que je ne connais pas lorsque je développe l'expression rationnelle ?).

Pour afficher le problème :

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

Réponse acceptée :

Le script suivant doit filtrer toutes les séquences de contrôle ANSI/VT100/xterm pour (basé sur ctlseqs). Testé au minimum, veuillez signaler toute sous- ou sur-correspondance.

#!/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;
}

Problèmes connus :

  • Ne se plaint pas des séquences malformées. Ce n'est pas à cela que sert ce script.
  • Les arguments de chaîne multiligne pour DCS/PM/APC/OSC ne sont pas pris en charge.
  • Les octets compris entre 128 et 159 peuvent être analysés en tant que caractères de contrôle, bien que cela soit rarement utilisé. Voici une version qui analyse les caractères de contrôle non-ASCII (cela modifiera le texte non-ASCII dans certains encodages, y compris UTF-8).
#!/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. Exécuter le script bash à partir de l'URL

  2. Linux ajoute la sortie de la console à un fichier journal ?

  3. Exécuter un script Python à partir de PHP

  4. Comment diriger la sortie de grep vers cp?

  5. Exécuter Pycharm en tant que root depuis le lanceur

Coloriser la sortie des capteurs ?

Comment voir la sortie d'un script Php ?

Bibliothèque de sortie de script shell coloré

Indentation de la sortie multiligne dans un script shell

Intercepter l'entrée et la sortie d'un exécutable spécifique

Comment utiliser /dev/fb0 en tant que console à partir de l'espace utilisateur ou y envoyer du texte