5 SC2020
Joachim Ansorg edited this page 2021-11-12 19:17:58 +01:00

tr replaces sets of chars, not words (mentioned due to duplicates).

Problematic code:

echo 'hello world' | tr 'hello' 'goodbye'

Correct code:

echo 'hello world' | sed -e 's/hello/goodbye/g'

Rationale:

tr is for transliteration, turning some characters into other characters. It doesn't match strings or words, only individual characters.

In this case, it transliterates h->g, e->o, l->d, o->y, resulting in the string "goddb wbrdd" instead of "goodbye world".

The solution is to use a tool that does string search and replace, such as sed.

Exceptions

None.