Введение
В этой лабораторной работе мы изучим команду tr в Linux — универсальную утилиту для преобразования текста на уровне отдельных символов. Название tr является сокращением от «translate» (перевод). Эта команда широко используется для таких задач, как изменение регистра, удаление определенных символов и базовая очистка данных. К концу этой лабораторной работы вы научитесь эффективно использовать tr для различных сценариев обработки текста. Лабораторная работа предназначена для начинающих, поэтому не волнуйтесь, если вы только знакомитесь с командами Linux — мы будем сопровождать вас на каждом этапе.
Основы работы с tr
Давайте начнем с понимания базового синтаксиса команды tr:
tr [OPTION]... SET1 [SET2]
Команда tr считывает текст из стандартного ввода (stdin), преобразует его в соответствии с указанными параметрами и наборами символов, а затем записывает результат в стандартный вывод (stdout).
Начнем с простого примера. Мы создадим файл greeting.txt с приветствием, а затем используем tr, чтобы преобразовать все строчные буквы в заглавные.
Сначала создайте файл:
echo "hello, world" > ~/project/greeting.txt
Совет: вы можете копировать и вставлять команды создания файлов в терминал, чтобы создать их правильно.
Эта команда создает новый файл greeting.txt в вашей рабочей директории (~/project/) с содержимым "hello, world".
Теперь используем tr для преобразования всех строчных букв в заглавные:
cat ~/project/greeting.txt | tr 'a-z' 'A-Z'
Вы должны увидеть следующий вывод:
HELLO, WORLD
Разберем эту команду:
cat ~/project/greeting.txt: считывает содержимое файла.|: это символ конвейера (pipe). Он берет вывод команды слева и передает его в качестве входных данных команде справа.tr 'a-z' 'A-Z': это наша командаtr. Она переводит каждый символ из первого набора ('a-z', что означает все строчные буквы) в соответствующий символ из второго набора ('A-Z', что означает все заглавные буквы).
Обратите внимание, что эта команда не изменяет исходный файл. Если вы хотите сохранить преобразованный текст, вам нужно перенаправить вывод в новый файл.
Удаление символов с помощью tr
Команда tr также может удалять определенные символы из входных данных. Это особенно полезно, когда нужно очистить текст от нежелательных знаков. Давайте создадим файл с пунктуацией и удалим её.
Сначала создайте файл с пунктуацией:
echo "Hello, World! How are you?" > ~/project/punctuated.txt
Совет: вы можете копировать и вставлять команды создания файлов в терминал, чтобы создать их правильно.
Теперь используем tr для удаления всей пунктуации:
cat ~/project/punctuated.txt | tr -d '[:punct:]'
Вы должны увидеть:
Hello World How are you
Разберем эту команду:
cat ~/project/punctuated.txt: считывает содержимое файла.|: передает вывод командеtr.tr -d '[:punct:]':- Опция
-dуказываетtrудалить указанные символы. [:punct:]— это класс символов, представляющий все знаки пунктуации. Классы символов — это предопределенные наборы, которые упрощают указание групп символов.
- Опция
Эта команда удаляет все знаки пунктуации из текста, оставляя только буквы, цифры и пробелы.
Преобразование нескольких символов
Теперь давайте рассмотрим более сложное преобразование. Мы создадим файл с закодированным текстом и используем tr для его декодирования. Этот пример демонстрирует, как tr можно использовать для простого шифрования и дешифрования.
Сначала создайте файл с закодированным текстом:
echo "Uijt jt b tfdsfu nfttbhf." > ~/project/encoded.txt
Совет: вы можете копировать и вставлять команды создания файлов в терминал, чтобы создать их правильно.
Теперь декодируем его:
cat ~/project/encoded.txt | tr 'b-zaB-ZA' 'a-zA-Z'
Вы должны увидеть:
This is a secret message.
Разберем эту команду:
cat ~/project/encoded.txt: считывает содержимое закодированного файла.|: передает вывод командеtr.tr 'b-zaB-ZA' 'a-zA-Z':- Первый набор
b-zaB-ZAобъединяет два сдвинутых алфавита:b-za: строчные буквы от b до z, за которыми следует aB-ZA: заглавные буквы от B до Z, за которыми следует A
- Вместе они охватывают каждую букву, которую нужно сдвинуть назад на одну позицию.
- Второй набор
a-zA-Z— это: строчные буквы от a до z, за которыми следуют заглавные от A до Z. - Это создает отображение, где каждая буква из первого набора заменяется соответствующей буквой из второго набора:
- b (1-я в первом наборе) → a (1-я во втором наборе)
- c (2-я в первом наборе) → b (2-я во втором наборе)
- ...
- a (26-я в первом наборе) → z (26-я во втором наборе)
- B (27-я в первом наборе) → A (27-я во втором наборе)
- ...
- A (52-я в первом наборе) → Z (52-я во втором наборе)
- Это эффективно сдвигает каждую букву во входных данных назад на одну позицию в алфавите как для строчных, так и для заглавных букв, что правильно декодирует сообщение.
- Первый набор
Этот тип подстановки — простейшая форма шифрования, называемая шифром Цезаря. Хотя он не является безопасным для реального использования, это отличный пример того, как tr можно использовать для посимвольной подстановки.
Использование классов символов с tr
Команда tr поддерживает различные классы символов — предопределенные наборы знаков. Они могут быть очень полезны для более сложных преобразований текста. Давайте применим их в практическом сценарии.
Сначала создайте файл со смешанным содержимым:
echo "User123 logged in at 09:45 AM on 2023-08-15" > ~/project/log_entry.txt
Совет: вы можете копировать и вставлять команды создания файлов в терминал, чтобы создать их правильно.
Теперь извлечем только цифры из этой записи лога:
cat ~/project/log_entry.txt | tr -cd '[:digit:]'
Вы должны увидеть:
12309452023815
Разберем эту команду:
cat ~/project/log_entry.txt: считывает содержимое файла лога.|: передает вывод командеtr.tr -cd '[:digit:]':- Опция
-cинвертирует набор (означает «все, кроме этого набора»). - Опция
-dудаляет указанные символы. [:digit:]— это класс символов, представляющий все цифры (0-9).- Вместе
-cd '[:digit:]'означает «удалить все символы, которые не являются цифрами».
- Опция
Эта команда полезна для извлечения числовых данных из смешанного текста, что может пригодиться при анализе логов или очистке данных.
Сжатие повторов с помощью tr
Команда tr также может «сжимать» повторяющиеся символы в одно вхождение. Это полезно для очистки данных с ненужными повторами. Давайте создадим файл с повторяющимися символами и очистим его.
Сначала создайте файл с повторяющимися пробелами:
echo "This is a test with extra spaces." > ~/project/spaced.txt
Совет: вы можете копировать и вставлять команды создания файлов в терминал, чтобы создать их правильно.
Теперь используем tr для сжатия повторяющихся пробелов:
cat ~/project/spaced.txt | tr -s ' '
Вы должны увидеть:
This is a test with extra spaces.
Разберем эту команду:
cat ~/project/spaced.txt: считывает содержимое файла с лишними пробелами.|: передает вывод командеtr.tr -s ' ':- Опция
-sсжимает повторы указанного символа в одно вхождение. ' 'указывает, что мы хотим сжать символы пробела.
- Опция
Эта команда особенно полезна при работе с плохо отформатированными данными или когда нужно нормализовать пробелы в текстовом файле.
Резюме
В этой лабораторной работе мы изучили универсальную команду tr в Linux. Мы научились:
- Изменять регистр текста
- Удалять определенные символы
- Преобразовывать несколько символов
- Использовать классы символов
- Сжимать повторяющиеся символы
Команда tr — мощный инструмент для манипуляции текстом. Вот дополнительные опции, которые мы не рассматривали подробно:
-c: инвертировать набор символов в string1, то есть работать со всеми символами, которых нет в string1-t: усечь string1 до длины string2
Для более сложных задач обработки текста в будущих лабораторных работах вы можете изучить такие команды, как sed и awk.



