sed mon ami
Toi qui n’utilises pas de linux, bsd ou macosx passes ton chemin car ce post va passablement te saouler.
Beaucoup de gens ignorent une subitilité de la substitution de caractère avec sed, ou vi ou encore d’autres. Laquelle me direz-vous? Et bien c’est assez simple en fait, prenons un exemple pratique :
Je veux remplacer “maman” par “papa” dans le fichier famille. L’utilisation classique sera la suivante :
#> sed -e ‘s/maman/papa/’ famille
Jusque là, rien de bien chiant ou violent. Il s’agit d’une utilisation classique des regexp donc frouny t’es gentil mais on est pas des billes.
Là où les choses se compliquent, ou deviennent chiantes pour les gens, c’est lorsque l’on veut remplacer l’url “http://www.monsite.com/avec/un/chemin/chiant” par “http://www.nouveausite.com/nouveau/chemin/joli”. En effet, beaucoup de gens font acte de barbarie et font la commande suivante :
#> sed -e ‘s/http:\/\/www.monsite.com\/avec\/un\/chemin\/chiant/http:\/\/www.nouveausite.com\/nouveau\/chemin\/joli/’
Nous sommes bien d’accord, c’est moche, lourd et plus on a de / dans le mot à remplacer ou son remplaçant plus ça devient barbare. C’est ici qu’apparaît la subtilité des regexp car il faut bien comprendre une chose, le caractère qui se trouve après le ‘s’ correspond au caractère séparateur du champ à remplacer et du champ remplaçant, ainsi on peut réécrire cette ligne d’une manière beaucoup plus simple (et moins chiante à écrire) que voici :
#> sed -e ‘s,http://www.monsite.com/avec/un/chemin/chiant,http://www.nouveausite.com/nouveau/chemin/joli,’
Voilà, le petit tip à la con est terminé.
Bon ceci ça marche aussi dans Vim et en Perl, d’ailleurs souvent c’est le point d’exclamation qu’on trouve comme premier remplaçant dans les bouts de codes et autres snippets.
Après moi je fais beaucoup de trucs avec perl, donc j’ai tendance à zapper “sed” au profit de “perl -pi -e ‘…; s/bidule/truc/;…’ ” dès lors que je suis sûr que perl est installé (donc pas pour des scripts d’install.