Команда Tr в Linux с примерами
Команда Tr в Linux с примерами
В этом руководстве мы покажем вам, как использовать tr команду, на практических примерах и подробных объяснениях наиболее распространенных вариантов.

tr
утилита командной строки в системах Linux и Unix, которая переводит, удаляет и сжимает символы из стандартного ввода и записывает результат в стандартный вывод.
Команда tr
может выполнять такие операции, как удаление повторяющихся символов, преобразование прописных букв в строчные, а также замена и удаление основных символов. Как правило, он используется в сочетании с другими командами через трубопровод.
Как использовать tr
команду
Синтаксис tr
команды следующий:
tr OPTION... SET1 [SET2]
tr
принимает два набора символов, обычно одинаковой длины, и заменяет символы первого набора соответствующими символами из второго набора.
A SET
- это в основном строка символов, включая специальные символы с обратной косой чертой.
В следующем примере tr
будут заменены все символы из стандартного ввода (baksdev) путем сопоставления символов из первого набора с совпадающими символами из второго набора.
echo 'baksdev' | tr 'lin' 'red'
Каждое вхождение l
заменяется на r
, i
с e
и n
на d
:
reduxeze
Наборы символов также могут быть определены с использованием диапазонов символов. Например, вместо того, чтобы писать:
echo 'baksdev' | tr 'lmno' 'wxyz'
ты можешь использовать:
echo 'baksdev' | tr 'l-n' 'w-z'
При использовании опции -c
( --complement
) tr
заменяются все символы, которых нет в SET1.
В приведенном ниже примере все символы, кроме «li», будут заменены последними символами из второго набора:
echo 'baksdev' | tr -c 'li' 'xy'
liyyyiyyy
Как вы могли заметить, вышеприведенный вывод имеет еще один видимый символ, чем ввод. Это связано с тем, что echo
команда печатает невидимый символ новой строки, \n
который также заменяется на y
. Чтобы отобразить строку без новой строки, используйте -n
параметр.
Опция -d
( --delete
) указывает tr
на удаление символов, указанных в SET1. При удалении символов без сжатия указывайте только один набор.
Приведенная ниже команда удалит l
, i
и z
символы:
echo 'baksdev' | tr -d 'liz'
Символ L
не удаляется, потому что ввод включает в себя заглавные буквы, в L
то время как l
символы в наборе строчные.
Lnuxe
Опция -s
( --squeeze-repeats
) заменяет последовательность повторяющихся вхождений набором символов в последнем SET.
В следующем примере tr
удаляются повторяющиеся пробелы:
echo "GNU \ Linux" | tr -s ' '
GNU \ Linux
Когда используется SET2, последовательность символов, указанная в SET1, заменяется на SET2.
echo "GNU \ Linux" | tr -s ' ' '_'
GNU_\_Linux
Опция -t
( --truncate-set1
) вынуждает tr
обрезать SET1 до длины SET2 перед дальнейшей обработкой.
По умолчанию, если SET1 больше, чем SET2, tr
будет повторно использоваться последний символ SET2. Вот пример:
echo 'Linux ize' | tr 'abcde' '12'
Вывод показывает, что символ e
из SET1 соответствует самому последнему символу из SET2, а именно 2
:
Linux iz2
Теперь используйте ту же команду с -t
опцией:
echo 'Linux ize' | tr -t 'abcde' '12'
Linux ize
Вы можете видеть, что последние три символа SET1 удалены. SET1 становится 'ab', такой же длины, как SET2, и замена не производится.
Объединение вариантов
Команда tr
также позволяет комбинировать ее параметры. Например, следующая команда первого заменяет все символы , кроме i
с , 0
а затем сжимает повторяющиеся 0
символы:
echo 'Linux ize' | tr -cs 'i' '0'
0i0i0
Примеры команд Tr
В этом разделе мы рассмотрим несколько примеров общего использования tr
команды.
Преобразовать нижний регистр в верхний регистр
Преобразование нижнего регистра в верхний или обратный является одним из типичных вариантов использования tr
команды. [:lower:]
соответствует всем символам в нижнем регистре и [:upper:]
соответствует всем символам в верхнем регистре.
echo 'Baksdev' | tr '[:lower:]' '[:upper:]'
BAKSDEV
Вместо классов персонажей вы также можете использовать диапазоны:
echo 'Baksdev' | tr 'a-z' 'A-Z'
Чтобы преобразовать верхний регистр в нижний регистр, просто поменяйте местами наборы.
Удалить все нечисловые символы
Следующая команда удаляет все нечисловые символы:
echo "my phone is 123-456-7890" | tr -cd [:digit:]
обозначает все цифры, и, используя
[:digit:] -c
опцию, команда удаляет все не цифры. Вывод будет выглядеть так:
1234567890
Поместите каждое слово в новую строку
Чтобы поместить каждое слово в новую строку, нам нужно сопоставить все не алфавитно-цифровые символы и заменить их новой строкой:
echo 'GNU is an operating system' | tr -cs '[:alnum:]' '\n'
GNU
is
an
operating
system
Удалить пустые строки
Чтобы удалить пустые строки, просто сожмите повторяющиеся символы новой строки:
tr -s '\n' < file.txt > new_file.txt
В команде выше мы используем символ перенаправления <
передать содержание file.txt
в tr
команде. Перенаправление >
записывает вывод команды в new_file.txt
.
Печать $PATH
каталогов на отдельной строке
$PATH
Переменная окружающей среды является двоеточиями список каталогов, сообщает оболочке , какие каталоги для поиска исполняемых файлов при вводе команды.
Чтобы напечатать каждый каталог в отдельной строке, нам нужно сопоставить двоеточие ( :
) и заменить его новой строкой:
echo $PATH | tr ':' '\n'
/usr/local/sbin
/usr/local/bin
/usr/sbin
/usr/bin
/sbin
/bin
Вывод
tr -
команда для перевода или удаления символов
Хотя очень полезно, tr
может работать только с одиночными символами. Для более сложного сопоставления с образцом и работы со строками, вы должны использовать sed
или awk
.
Комментарии
Если у вас есть вопросы, не стесняйтесь оставлять комментарии ниже.