====== expand ======
* Objet : expand
* Niveau requis : {{tag>débutant avisé}}
* Commentaires : //Remplacer, dans un fichier comme dans un flux, chaque caractère de tabulation par une suite de caractères “espace”. //
* Débutant, à savoir : [[:doc:systeme:commandes:le_debianiste_qui_papillonne|Utiliser GNU/Linux en ligne de commande, tout commence là !.]] :-)
* Suivi : {{tag>à-tester}}
* Création par [[user>MicP]] 03/10/2013
* Testé par <...> le <...>
* Commentaires sur le forum : [[http://debian-facile.org/viewtopic.php?id=7531 | Lien vers le forum concernant ce tuto]] ((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 [[doc:programmation:shell:shell#rediriger_l_affichage|redirection de flux]] ''>'', ''>>'' et ''|''.\\ Voir la documentation sur le [[:doc:programmation:shell:]] pour plus d'informations.
===== TPs =====
==== Application à la commande ''chage'' ====
Ci dessous, un copié/collé du retour de [[doc:systeme:chage|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 [[doc:programmation:shell:pipe|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
:-D
J'ai dû modifier la variable ''LANG'' pour obtenir la version américaine de la sortie de [[doc:systeme:chage|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