J'utiliserais les groupes de capture en regex :
$ string="hello-world"
$ prefix="hell"
$ suffix="ld"
$ set +H # Disables history substitution, can be omitted in scripts.
$ perl -pe "s/${prefix}((?:(?!(${suffix})).)*)${suffix}/\1/" <<< $string
o-wor
$ string1=$string$string
$ perl -pe "s/${prefix}((?:(?!(${suffix})).)*)${suffix}/\1/g" <<< $string1
o-woro-wor
((?:(?!(${suffix})).)*)
s'assure que le contenu de ${suffix}
seront exclus du groupe de capture. En termes d'exemple, c'est l'équivalent en chaîne de caractères de [^A-Z]*
. Sinon, vous obtiendrez :
$ perl -pe "s/${prefix}(.*)${suffix}/\1/g" <<< $string1
o-worldhello-wor
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.