Я хотел бы заменить набор символов соответствующими символами из другого набора, примерно так:
original set: ots
"target" set: u.x
foobartest → fuubar.ex.
Подобные переводы / транслитерации являются специальностью tr
команды:
$ echo 'foobartest' | tr 'ots' 'u.x'
fuubar.ex.
К сожалению tr
, не поддерживает изменение файлов на месте, как это sed
делает.
Я хотел бы использовать, sed
чтобы мне не пришлось заново изобретать колесо жонглирования временными файлами.
tr
(правильно) игнорирует рекурсию в наборах замены: echo 'abc' | tr ab bx
→ bxc
. Примитивное решение может привести к этому, xxc
потому что оно повторно применяет перевод к уже переведенным символам.
sed
отличие от GNU tr
может транслитерировать многобайтовые символы)