~rom1v/blog { un blog libre }

sed : changer de séparateur

Si vous effectuez quelques traitements simples en ligne de commande, vous connaissez forcément l’outil sed, et plus particulièrement la commande :

sed 's/ancien/récent/'

qui permet de remplacer ancien par récent :

$ sed 's/ancien/récent/' <<< 'ce système est ancien, voire très ancien'
ce système est récent, voire très ancien

Pour remplacer toutes les occurrences, on rajoute un g :

$ sed 's/ancien/récent/g' <<< 'ce système est ancien, voire très ancien'
ce système est récent, voire très récent

Cependant, la syntaxe est assez lourde lorsqu’on veut remplacer des /, par exemple pour remplacer /home/rom/sh/ par /usr/bin/ :

$ sed 's/\/home\/rom\/sh\//\/usr\/bin\//' <<< /home/rom/sh/myscript
/usr/bin/myscript

Heureusement, il est possible de changer le séparateur, et très facilement : c’est simplement le caractère après le s, et on met ce que l’on veut :

$ sed 's:/home/rom/sh:/usr/bin:' <<< /home/rom/sh/myscript
/usr/bin/myscript
$ sed 's|/home/rom/sh|/usr/bin|' <<< /home/rom/sh/myscript
/usr/bin/myscript

(il suffit de backslasher le caractère qui sert de séparateur dans les tokens)

Allez, pour s’amuser :

sed sachagena <<< 'des choux'
sed subucu <<< 'trop bon'

Commentaires

Guizmo.7

Je savais que l’on utilisait < pour envoyer sur l’entrée standard mais pourquoi tu mets <<< ? Il y a une différence ?

®om

< c’est pour mettre le contenu d’un fichier sur stdin

<<< (bash only) c’est pour mettre directement le contenu

cat < /etc/hostscat <<< bonjour
Guizmo.7

Génial !

Et << ça existe ?

®om

oui: ça lit l’entrée standard jusqu’à tomber sur la ligne correspondante

$ cat << 'au revoir'
> bonjour
> comment ça va?
> au revoir
bonjour
comment ça va?
guizmo.7

Merci :)

(Public : On veut d’autres articles !!)

Fugitif

On peu aussi faire sed -i 's/ancien/récent/' fichier_a_modifier.log qui remplacera ancien par récent directement en insertion (option -i).

Par contre je ne connaissait pas sed 's|/home/rom/sh|/usr/bin|'

Je m’amusait à mettre des backslash à chaque fois

Les commentaires sont fermés.