expand

Objet : expand

Niveau requis :

Commentaires : Remplacer, dans un fichier comme dans un flux, chaque caractère de tabulation par une suite de caractères “espace”.

Débutant, à savoir : Utiliser GNU/Linux en ligne de commande, tout commence là !.

Suivi :

Création par MicP 03/10/2013

Testé par <...> le <...>

Commentaires sur le forum : Lien vers le forum concernant ce tuto 1) N'hésitez pas à y faire part de vos remarques, succès, améliorations ou échecs !

Introduction

Les caractères de tabulation sont interprétés différemment en fonction du terminal qui va devoir les afficher.
Lors d'un “copié/collé” de la sortie d'une commande contenant des caractères de tabulation, l'affichage du texte obtenu dans les posts du forum pourrait apparaître déformé du fait de cette différence d'interprétation des caractères de tabulation.

La commande expand permet de remplacer, dans un fichier comme dans un flux, chaque caractère de tabulation par une suite de caractères “espace” (8 par défaut).

Utilisation

Pour convertir en une suite de 8 caractères “espace”, chaque caractère de tabulation contenu dans le fichier ~/fichier, et enregistrer le résultat dans le fichier ~/nouveau_fichier:

expand ~/fichier > ~/nouveau_fichier

Pour convertir l'affichage de la commande commande et écrire le résultat à la fin du fichier ~/commande.log :

commande | expand >> ~/commande.log

Pour convertir l'affichage de la commande commande en remplaçant les tabulations par 3 caractères “espace” et afficher le résultat :

commande | expand -t 3
Les 3 lignes de commande ci-dessus utilisent les caractères de redirection de flux >, >> et |. Voir la documentation sur le shell pour plus d'informations.

TPs

Application à la commande ''chage''

Ci dessous, un copié/collé du retour de la commande chage dont les caractères de tabulation posent problème, car chaque caractère de tabulation est converti en une suite de 4 caractères “espace” une fois affiché dans un post du forum.

tmpLang=$LANG && LANG=C; chage -l $USER; LANG=$tmpLang

Donne une fois copié/collé dans le forum :

Last password change : Aug 25, 2013
Password expires : never
Password inactive : never
Account expires : never
Minimum number of days between password change : 0
Maximum number of days between password change : 99999
Number of days of warning before password expires : 7

Alors qu'en utilisant la commande expand au travers d'un pipe |, chaque caractère de tabulation sera remplacé par une suite de 8 caractères “espace”.
Dès lors, le contenu du copié/collé ne comportant plus de caractère de tabulation, l'affichage résultant dans le forum gardera la même apparence que dans la fenêtre du terminal qui a servi de source à la copie :

tmpLang=$LANG && LANG=C; chage -l $USER | expand; LANG=$tmpLang

Donnera collé dans le forum :

Last password change : Aug 25, 2013
Password expires : never
Password inactive : never
Account expires : never
Minimum number of days between password change : 0
Maximum number of days between password change : 99999
Number of days of warning before password expires : 7

J'ai dû modifier la variable LANG pour obtenir la version américaine de la sortie de la commande chage car la version française de cette commande présente justement un défaut au niveau des caractères de tabulation. Si je trouve une autre commande retournant des caractères de tabulation dans sa version française, je n'aurai pas à modifier et restaurer la variable LANG, et ce dokuWiKi en deviendra plus clair. Donc en chantier pour l'instant...

Voir aussi

infocmp $TERM
# Reconstructed via infocmp from file: /lib/terminfo/x/xterm xterm|xterm-debian|X11 terminal emulator, am, bce, km, mc5i, mir, msgr, npc, xenl, colors#8, cols#80, it#8, lines#24, pairs#64, acsc=``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~, .../...

Dans le retour de commande ci-dessus, “it#8” indique que les caractères de tabulation occuperont un espace équivalent à une suite de 8 caractères “espace” dans le terminal “xterm”.

man expand
man unexpand