Sed , quick & dirty tips


Copier-coller d’astuces parues sur la liste de diffusion clx@clx.asso.fr .

Remplacer .jpg par rien

Julien Soula wrote
sed 's/\.jpg$//'

Antoine Van-Elstraete wrote
sed 's#.jpg$##g'

Gaétan Ryckeboer wrote
sed "s/\\.jpg//g"

Jean-Yves LENHOF wrote
sed -e 's/\.jpg$//'

Pourquoi y a-t-il autant de façon d’utiliser sed !
C’est incroyable, non ?

un peu de syntaxe et un peu de simplification :

- le "." sans le "\" signifie qu’on "match" n’importe quel caractère donc un ".jpg" pourrait supprimer quelque chose comme "-jpg". On dit que le "\" échappe le caractère qui le suit.

- le "g" à la fin signifie qu’on applique la règle autant de fois qu’on peut sur la même ligne (c’est pourquoi l’exemple de Julien ne marche que s’il n’y a qu’un fichier par ligne)

- le "$" signifie que la règle ne s’applique qu’en fin de ligne (cf. + juste au-dessus)

- le "\\" de Gaétan vient du fait qu’il a utilisé des "" (guillemets) et Jean-Yves des ’’ (apostrophes). Or les "\" sont interprétés dans les "" et "\\" devient "\"

- on peut prendre n’importe quel séparateur. Par habitude, on prend "/" mais on peut tres bien utiliser "#" cf l’exemple d’Antoine.

Armé de ces réflexions, choisis ton camp ! :-)

Remplacer par bloc

- Enlever un bloc final :

echo "Version: 1.2.2rc2me4"|sed -e "s/^Version: \(.*\)/Version: cequejeveux/g"
Version: cequejeveux

Cas facile, probablement plus encore en awk .

- Enlever un bloc initial :

echo "cmn-1-0-2sv5"| sed  -e  "s/\(.*\)\([0-9]-[0-9]-[0-9]sv[0-9]*\)/\2/"
1-0-2sv5

On utilise ici les champs \1 , le premier bloc de parenthèses et \2 , le second . A noter, on peut isoler les bloc de chiffres n fois comme vu ci-dessus, ce n’est pas le but ici.

Ces deux cas utilisent les expressions régulières.
Un bon site pour débuter ? Le site du zéro


- Un bon article sur sed : Wikipedia
- ou encore Grymoire


Commentaires

Annonces

Annuaire LibreNord

Retrouvez l’annuaire de logiciels libres créé par l’association Club Linux Nord-Pas de Calais sur le site suivant http://www.librenord.org