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

12 set 2022 3 min di lettura
Как использовать команду Tr в Linux
Indice dei contenuti

Введение

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

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

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

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

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

tr OPTION... SET1 [SET2]

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

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

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

echo 'noviello' | tr 'nov' 'red'

tr заменит каждое вхождение n на r или на e и v на d.

Вывод будет выглядеть следующим образом:

redielle

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

echo 'noviello' | tr 'nvl' 'xyz'
xoyiezzo

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

echo 'noviello' | tr 'ln' 'w-z'
yoviewwo

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

В следующем примере все символы, которых нет в SET1, будут заменены последним символом из SET2:

echo 'noviello' | tr -c 'no' 'xy'

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

noyyyyyoy

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

Следующая команда удалит все символы, указанные в SET1. При удалении символов без сжатия можно указать только один набор.

echo 'noviello' | tr -d 'nol'

Символ L не будет удален, потому что ввод включает заглавную букву L, а символ l установлен в нижнем регистре.

vie

Опция -s (--squeeze-repeats) заменяет последовательность повторяющихся вхождений на набор символов из последнего SET. В следующем примере будут удалены повторяющиеся символы пробела:

echo "GNU \ Linux" | tr -s ' '
GNU \ Linux

При использовании SET2 последовательность символов, указанная в SET1, заменяется на SET2.

echo "GNU \ Linux" | tr -s ' ' '_'
GNU_\_Linux

Параметр -t (--truncate-set1) принудительно усекает SET1 до длины SET2 перед выполнением дальнейшей обработки.

По умолчанию, если SET1 больше, чем SET2, tr будет повторно использовать последний символ SET2. Вот пример:

echo 'novi ello' | tr 'abcde' '12'

Вывод покажет, что символ e из SET1 соответствует последнему символу из SET2, который равен 2:

novi 2llo

Теперь используйте ту же команду с параметром -t:

echo 'novi ello' | tr -t 'abcde' '12'

Видно, что в этом случае удаляются последние три символа SET1. SET1 становится «ab» той же длины, что и SET2.

novi ello

Комбинация вариантов

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

echo 'novi ello' | tr -cs 'i' '0'
0i0

Преобразование строчных букв в прописные

Преобразование строчных букв в прописные или наоборот — один из типичных вариантов использования команды tr. [:lower:] соответствует всем символам нижнего регистра, а [:upper:] соответствует всем символам верхнего регистра.

echo 'Noviello' | tr '[:lower:]' '[:upper:]'
NOVIELLO

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

echo 'Noviello' | tr 'az' 'A-Z'

Чтобы преобразовать верхний регистр в нижний, просто измените положение наборов, затем:

echo 'Noviello' | tr '[:upper:]' '[:lower:]'
noviello

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

В следующем примере будут удалены все нечисловые символы из ввода команды tr:

echo "numero 123-456-789" | tr -cd [:digit:]

[: цифра:] обозначает все цифровые символы, а с помощью параметра -c команда удаляет все нецифровые символы. Вывод будет выглядеть следующим образом:

123456789

Поместите каждое слово на новую строку

Чтобы поместить каждое слово в новую строку, нам нужно сопоставить все небуквенно-цифровые символы и заменить их новой строкой:

echo 'Coding is my cardio,' | tr -cs '[:alnum:]' '\n'

Вы должны получить выходное сообщение, подобное следующему:

Coding
 is
 my
 cardio

Удалить пустые строки

Чтобы удалить пустые строки, просто нажмите повторяющиеся символы новой строки:

tr -s '\n' < mylog.txt > new_file.txt

В приведенной выше команде мы используем символ перенаправления < для передачи содержимого команды mylog.txt в команду tr в качестве входных данных. Перенаправление > записывает вывод команды в new_file.txt.

Вывести каталоги $PATH на отдельной строке

Переменная среды $PATH представляет собой список каталогов, разделенных двоеточиями, который сообщает оболочке, в каких каталогах искать исполняемые файлы при вводе команды.

Чтобы напечатать каждый каталог в отдельной строке, нам нужно сопоставить двоеточие ( :) и заменить его новой строкой:

echo $PATH | tr ':' '\n'

Вы должны получить выходное сообщение, подобное следующему:

/usr/local/sbin
 /usr/local/bin
 /usr/sbin
 /usr/bin
 /sbin
 /bin...

Вывод

К настоящему времени вы должны хорошо понимать, как использовать команду tr в Linux.

Buy me a coffeeBuy me a coffee

Supportaci se ti piacciono i nostri contenuti. Grazie.

Successivamente, completa il checkout per l'accesso completo a Noviello.it.
Bentornato! Accesso eseguito correttamente.
Ti sei abbonato con successo a Noviello.it.
Successo! Il tuo account è completamente attivato, ora hai accesso a tutti i contenuti.
Operazione riuscita. Le tue informazioni di fatturazione sono state aggiornate.
La tua fatturazione non è stata aggiornata.