web-dev-qa-db-fra.com

Comment convertir la sortie de commande de script en texte brut

J'utilise script-command pour enregistrer la sortie du terminal dans un fichier.

mais, il donne des caractères supplémentaires tels que square-like caractères et d'autres caractères chiffrés en texte.

La commande man script indique, en utilisant -q flag/option, qu'elle donne une sortie, sans écrire les messages de début et de fin dans la sortie standard, mais elle ne supprime pas les caractères supplémentaires.

here

comment puis-je obtenir ce qui suit:

1) rendre le fichier de sortie exactement identique à celui de la sortie du terminal, en supprimant les caractères supplémentaires.

2) Dans le fichier généré, à cause du texte brut - sans couleur (contrairement au terminal), je ne peux pas comprendre directement input commands, car la sortie et la commande que j'ai entrées apparaissent avec la même police,

puis-je rendre la commande aussi audacieuse ou facilement reconnaissable que la sortie restante?

2
ganeshdeshmukh

Si vous passez à la caisse:

man script | grep -i bugs -A 2

Tu peux voir ça:

le script place tout dans le fichier journal, y compris les sauts de ligne et les backspaces. Ce n'est pas ce que l'utilisateur naïf attend.


Ce que je propose est une combinaison de tr et sed pour obtenir ce que nous voulons.

La plupart de ces caractères indiquent des couleurs. Pour en supprimer la plupart, nous pouvons utiliser cette commande sed de ici :

sed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[mGK]//g"

Cependant, cela ne suffit toujours pas ... car, comme nous l'avons vu dans le script man, il existe d'autres caractères non imprimables dont nous devrions nous débarrasser. Pour supprimer ceux que nous pouvons simplement utiliser:

tr -dc '[[:print:]]\n'

Maintenant que nous y sommes presque, l’autre problème de mon test est que Prompt est répété deux fois. Il faut donc supprimer le début script avec dump et la valeur de TERMTERM=dump.


Résultat final:

  1. Pour capturer des commandes:

    TERM=dump script my_output
    
  2. Pour supprimer les caractères inutiles:

    sed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[mGK]//g" my_output | tr -dc '[[:print:]]\n' > new_output
    

Pour la deuxième partie de votre question, le fichier de sortie est simplement un fichier texte. Nous ne pouvons donc pas changer la police ni la taille de lignes spécifiques. Toutefois, votre sortie contient votre invite de manière à ce que vous sachiez quelle ligne est la commande et laquelle. est la sortie.

4
Ravexina