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'

#1 par Guizmo.7 à 3 octobre 2008 - 6 h 36 min
Citation
Je savais que l'on utilisait < pour envoyer sur l'entrée standard mais pourquoi tu mets <<< ? Il y a une différence ?
#2 par ®om à 3 octobre 2008 - 9 h 08 min
Citation
< c'est pour mettre le contenu d'un fichier sur stdin
<<< (bash only) c'est pour mettre directement le contenu
#3 par ®om à 8 octobre 2008 - 17 h 06 min
Citation
oui: ça lit l’entrée standard jusqu’à tomber sur la ligne correspondante
#4 par Guizmo.7 à 8 octobre 2008 - 16 h 55 min
Citation
Génial !
Et << ça existe ?
#5 par guizmo.7 à 27 octobre 2008 - 20 h 42 min
Citation
Merci
(Public : On veut d’autres articles !!)
#6 par Fugitif à 20 juin 2009 - 14 h 10 min
Citation
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