Sed - Insérer un espace entre chaque lettre

baissaoui
Messages postés
358
Date d'inscription
jeudi 2 septembre 2021
Statut
Webmaster
Dernière intervention
26 septembre 2022
- 21 juin 2022 à 13:16
Document initial créé par Jipicy

Insérer un espace entre chaque lettre

$ echo -e "bonjour la vie\net bonjour à toi" | sed 's/./& /g'
b o n j o u r l a v i e
e t b o n j o u r à t o i
L'inconvénient c'est que l'espace naturel entre chaque mot est doublé. Pour pallier à ce petit désagrément il suffit d'ajouter :
$ echo -e "bonjour la vie\net bonjour à toi" | sed 's/./& /g;s/  / /g'
b o n j o u r l a v i e
e t b o n j o u r à t o i
$

Voici encore une variante. Par rapport à la précédente le remplacement et fait dans un seul coup de s///
$ echo -e "bonjour la vie\net bonjour à toi" | sed -r 's/([^ ])/\1 /g'
b o n j o u r l a v i e
e t b o n j o u r à t o i

Pour ne pas utiliser l'option -r on peut écrire
 sed 's/\([^ ]\)/\1 /g'

Classe de caractères complémentée [^...]

[^...] - est une classe de caractères complémentée qui signifie "reconnaître un caractère non énuméré" et non "ne pas reconnaître un caractère énuméré".
Dans notre cas on peut traduire "reconnaître un caractère qui n'est pas espace".