単一置換は簡単です:
string="Mark Shuttleworth"
echo ${string/a/o}
Mork Shuttleworth
同時にダブルをすることは可能ですか?
echo ${string/a/o string/t/g} #doesn't work, but you get the idea
Mork Shuggleworgh
正規表現を使用することが可能であれば、正規表現で十分です。
ありがとう
私の知る限り、bash
の現在のバージョンでそれを行う唯一の方法は、2つのステップです。
$ string="Mark Shuttleworth"
$ string="${string//a/o}"; echo "${string//t/g}"
Mork Shuggleworgh
置換をネストしようとすると、エラーが発生します。
$ echo "${${string//a/o}//t/g}"
bash: ${${string//a/o}//t/g}: bad substitution
他のシェルがこのようなネストされた置換をサポートする場合があることに注意してください。 zsh 5.2
:
~ % string="Mark Shuttleworth"
~ % echo "${${string//a/o}//t/g}"
Mork Shuggleworgh
もちろん、tr
、sed
、Perl
などの外部ツールで簡単に実行できます
$ sed 'y/at/og/' <<< "$string"
Mork Shuggleworgh
$ Perl -pe 'tr /at/og/' <<< "$string"
Mork Shuggleworgh
$ tr at og <<< "$string"
Mork Shuggleworgh
1文字に置き換えているので、 tr
を使用するだけです。
tr at og
これにより、各a
がo
に置き換えられ、各t
がg
に置き換えられます。あなたの例では:
ek@Io:~$ tr at og <<<'Mark Shuttleworth'
Mork Shuggleworgh