Sed , quick & dirty tips
par , , , ,
popularité : 1%
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
Commentaires