Команда tr служит для перевода (замены) выбранных символов в другие символы или удаления их. В отличие от большинства других программ командной строки, команда tr не принимает имен файлов в качестве аргумента. Ввод команды tr осуществляется или со стандартного ввода, или с вывода других программ путем перенаправления. Вот общий синтаксис команды tr:

tr [опция] набор1 [набор2]

Условные обозначения

\nnn -- символ с восьмеричным значением nnn

\xnn -- символ с шестнадцатеричным значением nn

\\ -- обратный слэш

\a -- звуковой сигнал

\b -- backspace (обратный ход с забоем символа)

\f -- перевод страницы

\n -- новая строка

\r -- возврат каретки

\t -- горизонтальная табуляция

\v -- вертикальная табуляция

\E -- escape

ЗНАК1-ЗНАК2 -- все знаки от ЗНАК1 до ЗНАК2 в порядке возрастания. ЗНАК1 должен предшествовать по порядку возрастания ЗНАКУ2.

[ЗНАК1-ЗНАК2] -- то же, что и предыдущее, если оба набора используют эту форму.

[ЗНАК*] -- ЗНАК заполняет набор2 до длины набора1 знаками ЗНАК. Эта опция работает в конце набора2. Все символы после астерикса (*) игнорируются.

[ЗНАК*N] -- N копий символа ЗНАК. N подразумевается десятичным целым числом, если не начинается с 0; в этом случае считается восьмеричным целым числом.

[:alnum:] -- все буквы и цифры

[:alpha:] -- все буквы

[:blank:] -- все горизонтальные пробельные знаки

[:cntrl:] -- все управляющие знаки

[:digit:] -- все цифры

[:graph:] -- все печатные знаки, исключая пробел

[:lower:] -- все строчные буквы (нижний регистр)

[:print:] -- все печатные знаки, включая пробел

[:punct:] -- все знаки препинания

[:space:] -- все вертикальные или горизонтальные пробелы

[:upper:] -- все заглавные буквы (верхний регистр)

[:xdigit:] -- все шестнадцатеричные цифры

[=ЗНАК=] -- все знаки, эквивалентные ЗНАКУ

 

Позиции в квадратных скобках не являются обязательными. Команде tr требуется минимум один аргумент, а принимается максимум два. Первый аргумент, называемый набор1 перечисляет символы, подлежащие замене или удалению. Второй аргумент, набор2, перечисляет символы, которые должны заменить символы из набора1. Команда tr без опций заменит символы из набора1 символами из набора2.

 

-Заменить все буквы a на b в file.txt:

# cat file.txt | tr a b > file2.txt
или:
# tr a b < file.txt > file2.txt

Понятно, что возможности команды tr не ограничиваются заменой одной буквы. Команда может заменять любое количество указанных символов на другие символы. В этом случае каждый из наборов символов заключается в квадратные скобки, а скобки, в свою очередь, в кавычки; безразлично, двойные или одинарные.

'[набор1]' '[набор2]' или "[набор1]" "[набор2]"

 

-В наборе1 один подряд перечисляются символы, подлежащие замене, а в наборе2 - в соответствующем порядке символы, которые их должны заменить:

# echo cheer | tr '[abcdefghijklmnopqrstuvwxyz]' '[hijklmnopqrstuvwxyzabcdefg]'
jolly

-Для современных версий все эти квадратные скобки и кавычки не обязательны, можно просто перечислять символы:

# echo cheer | tr abcdefghijklmnopqrstuvwxyz hijklmnopqrstuvwxyzabcdefg
jolly

-Перевод символов из нижнего в верхний регистр:

# echo lower_case | tr '[a-z]' '[A-Z]'
или:
# echo lower_case | tr '[:lower:]' '[:upper:]'
LOWER_CASE

-Заменить все переносы строки на “-”:

# cat file.txt | tr '\n' '-'

-Заменить фигурные скобки круглыми:

# cat file.txt | tr '{}' '()'

-Заменить пробел табуляцией:

# echo "This is for testing" | tr [:space:] '\t'

 

Параметры tr:

-s - Замещает каждую последовательность повторяющихся символов, перечисленных в последней указанной строке, на единственный такой символ.

-d - Удаляет все вхождения символов, указанных в набор1

-c - Дополняет набор символов, задаваемый в набор1

-t - Сначала сократить строку 1 до размера строки 2. Если эта опция не указана, то размер строки 2 подгоняется под размер строки 1: если она больше, то обрезается, если меньше, то дополняется последним символом.

 

(-s)Заменить множество пробелов на один:

# echo many      blank     spaces | tr -s ' '
many blank spaces

-Заменить множество пробелов на 7:

# echo many      blank     spaces | tr -s ' ' '7'
many7blank7spaces

-Заменить множество пробелов одним, а его заменить на табуляцию:

# echo "This   is   for testing" | tr -s [:space:] '\t'

 

(-d)Удалить букву a:

# echo many blank spaces | tr -d a
mny blnk spces

-Удалить все цифры:

# echo "my username is 432234" | tr -d [:digit:]

-Удалить символ, используя его восьмеричное значение:

# cat list.txt |tr -d '\015'

 

-Опция «-c» используется, чтобы заменить несовпадающие символы с другим набором указанных символов:

# echo "unix/linux blog" | tr -c "u" "a"
uaaaaaaauaaaaaaa

-В этом примере нет буквы а, вот ее и будет удалять программа:

# echo a black cat | tr -cd b-z[:cntrl:][:blank:]
blck ct

Символы из группы [:cntrl:] нужно указать, чтобы их не удалили, иначе не происходит перенос строки, а пробел - [:blank:] - указать, чтобы он тоже остался на месте.

-Заменить множество пробелов одним и все кроме букв заменить переносом строки:

# tr -cs a-zA-Z '\n' < /etc/fstab
или:
# tr -cs "[:alpha:]" "\n" < /etc/fstab

-Оставит только цифры:

# echo "my username is 432234" | tr -cd [:digit:]

-Удалить нечитаемые символы:

# tr -cd [:print:] < file.txt

-Сгенерировать 10 паролей длиной 20 символов, состоящих из заглавных и строчных буквы английского алфавита и спец. символов:

# cat /dev/urandom | tr -dc 'A-Za-z0-9!@#$%^&*()-_=+?;:' | fold -w 20 | head -n 10

 

Tr некорректно работает с символами кириллицы в кодировке UTF-8.

Материалы: http://aidalinux.ru/w/Tr

https://ru.wikipedia.org/wiki/Tr