Команда Tr в Linux с примерами

tr — это утилита командной строки в системах Linux и Unix, которая переводит, удаляет и сжимает символы из стандартного ввода и записывает результат в стандартный вывод.

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

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

Как использовать команду tr

Синтаксис команды tr следующий:

tr OPTION... SET1 [SET2]

tr принимает два набора символов, обычно одинаковой длины, и заменяет символы из первых наборов соответствующими символами из второго набора.

SET — это в основном строка символов, включая специальные символы с обратным слэшем.

В следующем примере tr заменит все символы из стандартного ввода (linuxize), сопоставив символы из первого набора с соответствующими символами из второго набора.

echo 'linuxize' | tr 'lin' 'red'

Каждое вхождение l заменяется на r , i на e и n на d :

reduxeze

Наборы символов также можно определить с помощью диапазонов символов. Например, вместо написания:

echo 'linuxize' | tr 'lmno' 'wxyz'

вы можете использовать:

echo 'linuxize' | tr 'l-n' 'w-z'

Когда используется опция -c ( --complement ), tr заменяет все символы, которых нет в SET1.

В приведенном ниже примере все символы, кроме «li», будут заменены последним символом из второго набора:

echo 'linuxize' | tr -c 'li' 'xy'
liyyyiyyy

Как вы могли заметить, вывод выше имеет на один видимый символ больше, чем ввод. Это связано с тем, что команда echo печатает невидимый символ новой строки n который также заменяется на y . Чтобы отобразить строку без новой строки, используйте параметр -n .

Параметр -d ( --delete ) указывает tr удалить символы, указанные в SET1. При удалении символов без сжатия укажите только один набор.

Приведенная ниже команда удалит символы l , i и z :

echo 'Linuxize' | tr -d 'liz'

Символ L не удаляется, потому что входные данные включают L в верхнем регистре, а символ l в SET — в нижнем регистре.

Lnuxe

Параметр -s ( --squeeze-repeats ) заменяет последовательность повторяющихся вхождений на набор символов из последнего набора.

В следующем примере 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 'Linuxize' | tr '[:lower:]' '[:upper:]'
LINUXIZE

Вместо классов символов вы также можете использовать диапазоны:

echo 'Linuxize' | 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 .

Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.

Оставьте комментарий