En utilisant sed :
$ echo "$string" | sed -e "s/^$prefix//" -e "s/$suffix$//"
o-wor
Dans la commande sed, l'élément ^
correspond à un texte commençant par $prefix
et la queue $
correspond au texte se terminant par $suffix
.
Adrian Frühwirth soulève quelques bons points dans les commentaires ci-dessous, mais sed
à cet effet peut être très utile. Le fait que le contenu de $prefix et $suffix soit interprété par sed peut être bon OU mauvais - tant que vous faites attention, tout devrait bien se passer. La beauté de la chose est que vous pouvez faire quelque chose comme ceci :
$ prefix='^.*ll'
$ suffix='ld$'
$ echo "$string" | sed -e "s/^$prefix//" -e "s/$suffix$//"
o-wor
qui peut être ce que vous voulez, et qui est à la fois plus sophistiqué et plus puissant que la substitution de variable en bash. Si vous vous souvenez que de grands pouvoirs impliquent de grandes responsabilités (comme le dit Spiderman), tout devrait bien se passer.
Une introduction rapide à sed peut être trouvée à http://evc-cit.info/cit052/sed_tutorial.html
Une note concernant le shell et son utilisation des chaînes de caractères :
Pour l'exemple particulier donné, la formule suivante fonctionnerait également :
$ echo $string | sed -e s/^$prefix// -e s/$suffix$//
...mais seulement parce que :
- echo ne se soucie pas du nombre de chaînes de caractères dans sa liste d'arguments, et
- Il n'y a pas d'espace dans $prefix et $suffix
C'est généralement une bonne pratique de citer une chaîne sur la ligne de commande, car même si elle contient des espaces, elle sera présentée à la commande comme un seul argument. Nous mettons $prefix et $suffix entre guillemets pour la même raison : chaque commande d'édition à sed sera passée comme une seule chaîne. Nous utilisons des guillemets doubles parce qu'ils permettent l'interpolation de variables ; si nous avions utilisé des guillemets simples, la commande sed aurait obtenu une chaîne littérale $prefix
y $suffix
ce qui n'est certainement pas ce que nous voulions.
Remarquez également que j'utilise des guillemets simples pour définir les variables prefix
y suffix
. Nous ne voulons certainement pas que les chaînes de caractères soient interprétées, nous les mettons donc entre guillemets afin qu'aucune interpolation n'ait lieu. Encore une fois, ce n'est peut-être pas nécessaire dans cet exemple, mais c'est une très bonne habitude à prendre.
5 votes
Jetez un coup d'œil Guide avancé des scripts Bash
26 votes
Méfiez-vous des liens vers le soi-disant Guide avancé des scripts Bash ; il contient un mélange de bons et de mauvais conseils.