Utilisation de sed:
$ echo "$string" | sed -e "s/^$prefix//" -e "s/$suffix$//"
o-wor
Dans la commande sed, le ^
caractère correspond au texte commençant par $prefix
et le dernier $
correspond au texte se terminant par$suffix
.
Adrian Frühwirth fait 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 y prêtez attention, ça devrait aller. La beauté est que vous pouvez faire quelque chose comme ça:
$ prefix='^.*ll'
$ suffix='ld$'
$ echo "$string" | sed -e "s/^$prefix//" -e "s/$suffix$//"
o-wor
qui peut être ce que vous voulez, et est à la fois plus sophistiqué et plus puissant que la substitution de variables bash. Si vous vous souvenez qu'avec une grande puissance vient une grande responsabilité (comme le dit Spiderman), tout va bien.
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 cordes:
Pour l'exemple particulier donné, les éléments suivants fonctionneraient également:
$ echo $string | sed -e s/^$prefix// -e s/$suffix$//
... mais uniquement parce que:
- echo ne se soucie pas du nombre de chaînes dans sa liste d'arguments, et
- Il n'y a pas d'espaces dans $ prefix et $ suffix
Il est généralement recommandé 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 citons $ prefix et $ suffix pour la même raison: chaque commande d'édition à sed sera passée comme une chaîne. Nous utilisons des guillemets doubles car ils permettent une interpolation variable; si nous avions utilisé des guillemets simples, la commande sed aurait obtenu un littéral $prefix
et $suffix
ce n'est certainement pas ce que nous voulions.
Notez également mon utilisation de guillemets simples lors de la définition des variables prefix
et suffix
. Nous ne voulons certainement pas que quoi que ce soit dans les chaînes soit interprété, nous les citons donc pour qu'aucune interpolation n'ait lieu. Encore une fois, cela peut ne pas être nécessaire dans cet exemple, mais c'est une très bonne habitude à prendre.