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

Команда Linux Tr

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 'ln' 'wz'

При использовании опции -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 ) заменяет последовательность повторяющихся вхождений набором символов в последнем 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 'Linuxize' | tr '[:lower:]' '[:upper:]'
 LINUXIZE

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

 echo 'Linuxize' | tr 'az' 'AZ'

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

Удалить все нецифровые символы

Следующая команда удаляет все нечисловые символы:

 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 — это список каталогов, разделенных двоеточиями, который сообщает оболочке, в каких каталогах искать исполняемые файлы при вводе команды.

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

 echo $PATH | tr ':' 'n'
 /usr/local/sbin /usr/local/bin /usr/sbin /usr/bin /sbin /bin

Заключение

tr — команда для перевода или удаления символов.

Несмотря на свою полезность, tr может работать только с отдельными символами. Для более сложного сопоставления с шаблоном и работы со строками следует использовать sed или awk .

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

терминал tr

Связанные руководства

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *