Команда Tr в Linux, объясненная примерами
Настоящая сила Linux заключается в том, что существует множество программ и утилит, созданных для облегчения нашей жизни. Когда вы пишете много сценариев оболочки в своей среде, вам пригодится этот набор программ, где вы будете использовать эти программы для управления вводом или выводом в своих сценариях. Одной из таких утилит является tr
, что означает translate. Как следует из названия, команда tr используется для перевода, сжатия и удаления символов из стандартного ввода, записи в стандартный вывод в Linux и Unix-подобных операционных системах.
В этой статье мы изучим использование команды tr на практических примерах. В конце этого руководства вы освоитесь с командой tr и узнаете, в каком сценарии использование этой команды будет полезным.
Синтаксис команды tr и справка
Чтобы узнать синтаксис и список аргументов, которые поддерживает команда tr, обратитесь к справочной странице или используйте флаг --help
с командой tr
.
man tr
tr --help
Команда tr
принимает два аргумента в форме SET1 и SET2, где SET1 — это входные символы, которые будут переводится символами в SET2. Когда команде tr передаются определенные флаги, опционально можно использовать SET2.
tr [OPTION]… SET1 [SET2]
Пример 1. Перевод с помощью команды tr
Ниже приведен простой пример использования команды tr
. Команда tr
передается по конвейеру вместе с командой echo
, а строчный "ost" преобразуется в верхний регистр "OST".
Преобразование здесь будет происходить на основе положения символов в двух наборах. Первый символ в SET1 будет заменен первым символом в SET2 (o->O), аналогично для всех символов (s->S,t ->Т).
echo "ostechnix" | tr "ost" "OST"
OSTechnix
Преобразуйте нижний регистр в верхний с помощью команды tr.
Рекомендуем прочитать:
- Команда Bash Echo с примерами для Linux
Пример 2. Наборы символов и специальные символы
Команда tr
предлагает использование наборов символов, что значительно упрощает преобразование. Команда tr
также может интерпретировать специальные символы, такие как (\n
, \t
, \v
), которые могут быть переведены разными символами.
Наборы символов
Давайте посмотрим, как использовать набор символов. В приведенном ниже примере у меня есть строки, целые числа и символы пунктуации. знаки препинания заменяются точкой (.
) с использованием набора символов "[:punct:]"
.
echo "Ubuntu 20.04 #$%^" | tr "[:punct:]" "."
Перевести, используя набор символов
Пример 3. Преобразование регистра
При работе со строками вам может потребоваться изменить регистр строки с нижнего на верхний или наоборот. Используя команду tr
, вы можете выполнить преобразование регистра разными способами.
В первом способе вы можете ввести от a до z как в наборе 1, так и в наборе 2.
echo "ostechnix" | tr "abcdefghijklmnopqrstuvwxyz" "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
OSTECHNIX
Преобразование в верхний регистр
Обратите внимание, что это не предпочтительный способ.
Вместо ввода всех символов вы также можете использовать диапазоны (например, a-z, A-Z).
echo "ostechnix" | tr "a-z" "A-Z" # Lower to Upper case
OSTECHNIX
echo "OSTECHNIX" | tr "A-Z" "a-z" # Upper to Lower case
ostechnix
Преобразование нижнего и верхнего регистра с использованием диапазонов
Классы символов также можно использовать вместо двух вышеуказанных методов.
echo "OSTECHNIX" | tr "[:upper:]" "[:lower:]"
ostechnix
echo "ostechnix" | tr "[:lower:]" "[:upper:]"
OSTECHNIX
Преобразование с использованием набора символов
Пример 4. Удаление символов
Существует набор необязательных аргументов, которые tr
поддерживает для выполнения различных действий.
Одним из таких флагов является «-d
или --delete
», который удаляет символы, указанные в SET1.
Ниже приведены входные данные, в которых у меня есть три IP-адреса с пробелами в каждой строке и табуляциями (2) в третьей строке. Теперь, используя флаг -d
, вы можете очистить пробелы.
192.168. 1. 12
192.168. 1. 13
192.168. 1. 14
Запустите команду ниже, которая удалит все пробелы. Здесь важно отметить, что табуляция не удаляется, а удаляются только пробелы.
tr -d " " < tr_test.txt
Удалить пробелы
Если вы хотите удалить как пробел, так и табуляцию (горизонтальные пробелы), вы можете использовать набор символов "[:blank:]"
.
tr -d "[:blank:]" < tr_test.txt
Удалить пробелы и табуляции
Вы также можете использовать набор символов "[:space:]"
для удаления горизонтальных и вертикальных пробелов.
tr -d "[:space:]" < tr_test.txt
Удалить горизонтальные и вертикальные пробелы
Пример 5. Повторы сжатия
Когда используется флаг «-s
или --squeeze-repeats
», повторяющиеся символы, заданные в SET1, будут заменены единственным вхождением символа. В приведенном ниже примере вы можете видеть, что я использовал знак равенства 4 (=
). Теперь -s
заменит 4 (=
) на 1 (=
).
echo "Production IP ==== 192.168.1.10" | tr -s "="
Production IP = 192.168.1.10
Сжать символы
Ниже приведен еще один пример сжатия символов новой строки (\n
).
cat tr_test.txt | tr -s "\n"
Сжать символы новой строки
Пример 6. Дополнение
Когда используется флаг -c
, он выполняет обратный перевод для данного набора. В приведенном ниже примере tr обычно преобразует все алфавиты в "*"
. Но когда используется -c
, операция будет инвертирована. Все остальные символы, кроме алфавитов, будут заменены на "*"
.
echo "Employee Number is 1267890" | tr -c "[:alpha:]" "*"
Вы можете комбинировать это с другими флагами, чтобы получить определенные результаты. Например, если вы объедините его с флагом -d
, он выполнит обратную операцию удаления.
echo "Employee Number is 1267890" | tr -cd "[:digit:]"
Флаг дополнения
Примечание. Из приведенного выше примера видно, что символ новой строки также переводится/удаляется. При использовании этого метода обратите внимание на этот момент и продолжайте.
Пример 7. Перенаправление вывода
Во всех предыдущих разделах мы считывали входные данные из файла и выполняли некоторую обработку с помощью команды tr
, а выходные данные отправлялись на терминал. Если вы хотите перенаправить вывод в файл, а не на терминал, используйте оператор перенаправления.
tr -s "\n" < tr_test.txt > new_tr_test.txt
$кот new_tr_test.txt
Перенаправление вывода в файл
Связанное чтение:
- Перенаправление Bash, объясненное примерами
Заключение
В этой статье я рассказал вам, как использовать команду tr
. В Linux всегда есть несколько способов добиться одного и того же. Все, что мы показали в этой статье, также может быть достигнуто с помощью других программ, таких как sed
, awk
и т. д. Но знание этих команд и различных способов поможет вам решить правильную ситуацию. используйте правильную команду/программу.