47 votes

Comment nettoyer la sortie de la commande linux 'script' ?

J'utilise la commande linux 'script'. http://www.linuxcommand.org/man_pages/script1.html pour suivre certaines sessions interactives. Les fichiers de sortie contiennent des caractères non imprimables, y compris mes frappes de retour arrière.

Existe-t-il un moyen de mettre de l'ordre dans ces fichiers de sortie afin qu'ils ne contiennent que ce qui a été affiché à l'écran ?

Ou existe-t-il un autre moyen d'enregistrer une session interactive Shell (entrée et sortie) ?

38voto

Arcege Points 2033

Si vous souhaitez visualiser le fichier, vous pouvez envoyer la sortie par l'intermédiaire de col -bp ; cela permet d'interpréter les caractères de contrôle. Ensuite, vous pouvez en faire passer moins, si vous le souhaitez.

col -bp typescript | less -R

Sur certains systèmes col n'accepte pas d'argument de nom de fichier, utilisez cette syntaxe à la place :

col -bp <typescript | less -R

24voto

Myer Points 1892
cat typescript | perl -pe 's/\e([^\[\]]|\[.*?[a-zA-Z]|\].*?\a)//g' | col -b > typescript-processed

voici une interprétation de la chaîne de caractères entrée dans perl :

  • s/pattern//g signifie faire une substitution sur l'ensemble (le g signifie qu'il faut faire tout le travail au lieu de s'arrêter à la première chaîne d'entrée (substitut).

voici une interprétation du motif regex :

  • \e correspondre au caractère de contrôle spécial "escape" (ASCII 0x1A)
  • ( y ) sont le début et la fin d'un groupe
  • | signifie que le groupe peut correspondre à l'un des N motifs. où les N motifs sont
    • [^\[\]] ou
    • \[.*?[a-zA-Z] o
    • \].*?\a
  • [^\[\]] moyens
    • correspond à un ensemble de caractères NOT où les caractères not sont [ y ]
  • \[.*?[a-zA-Z] moyens
    • correspond à une chaîne de caractères commençant par [ puis effectuer une opération non gourmande .*? jusqu'au premier caractère alpha
  • \].*?\a moyens
    • correspond à une chaîne de caractères qui commence par ] puis effectuer une opération non gourmande .*? jusqu'à ce que vous atteigniez le caractère de contrôle spécial appelé "caractère d'alerte (cloche)"

3voto

Peeyush Points 233

J'ai utilisé cat filename qui supprime les caractères de contrôle :-)

2voto

Andrew Points 592

Pour répondre à la deuxième partie de ma question, il faut utiliser la fonction de journalisation de gnu screen : ^A H à partir d'une session d'écran en cours. La documentation est disponible à l'adresse suivante http://www.gnu.org/software/screen/manual/screen.html#Logging

2voto

bplus Points 2196

Si ce que vous recherchez est d'enregistrer vos commandes (par exemple pour les transformer plus tard en un script bash script), alors une solution raisonnable est de lancer script(1) puis à l'intérieur de celui-ci

bash -x

Par la suite grep le fichier de sortie (généralement "typescript") à la recherche des lignes commençant par un "+". L'expression régulière ^\+ fera l'affaire.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X