La substitution simple est facile:
string="Mark Shuttleworth"
echo ${string/a/o}
Mork Shuttleworth
est-il possible de faire un double en même temps?
echo ${string/a/o string/t/g} #doesn't work, but you get the idea
Mork Shuggleworgh
Les expressions régulières suffisent comme réponse, s'il est possible de les utiliser.
Merci
Autant que je sache, la seule façon de procéder dans les versions actuelles de bash
consiste à utiliser deux étapes, par exemple.
$ string="Mark Shuttleworth"
$ string="${string//a/o}"; echo "${string//t/g}"
Mork Shuggleworgh
Les tentatives d'imbrication de substitutions entraînent une erreur:
$ echo "${${string//a/o}//t/g}"
bash: ${${string//a/o}//t/g}: bad substitution
Notez que d'autres shells peuvent prendre en charge de telles substitutions imbriquées, par exemple. dans zsh 5.2
:
~ % string="Mark Shuttleworth"
~ % echo "${${string//a/o}//t/g}"
Mork Shuggleworgh
Bien sûr, des outils externes tels que tr
, sed
, Perl
peuvent le faire facilement.
$ sed 'y/at/og/' <<< "$string"
Mork Shuggleworgh
$ Perl -pe 'tr /at/og/' <<< "$string"
Mork Shuggleworgh
$ tr at og <<< "$string"
Mork Shuggleworgh
Vous remplacez des lettres simples, utilisez donc simplement tr
:
tr at og
Cela entraîne le remplacement de chaque a
par o
et de chaque t
par g
. Avec votre exemple:
ek@Io:~$ tr at og <<<'Mark Shuttleworth'
Mork Shuggleworgh