Единственная Замена легка:
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
находится на двух шагах, например,
$ 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
Вы заменяете одними буквами, поэтому просто используете tr
:
tr at og
Это заставляет каждого a
быть замененным o
и каждый t
, чтобы быть замененным g
. С Вашим примером:
ek@Io:~$ tr at og <<<'Mark Shuttleworth'
Mork Shuggleworgh
Попробуйте
echo ${string/a/o} ${string/t/g}
, я использую свой планшет, никакой bash
для тестирования.
можно хотеть к контролю с помощью printf
намного более гибкая команда.