Введение
В рамках этой лабораторной работы мы изучим команду 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(delete) указываетtrудалить указанные символы. [:punct:]— это класс символов, представляющий все знаки пунктуации. Классы символов — это предопределенные наборы, которые упрощают выбор групп знаков.
- Опция
Эта команда удаляет все знаки препинания, оставляя только буквы, цифры и пробелы.
Замена нескольких символов
Теперь перейдем к более сложной замене. Мы создадим файл с зашифрованным текстом и используем tr для его расшифровки. Этот пример наглядно показывает, как tr может применяться для простого шифрования и дешифрования.
Сначала создайте файл с закодированным текстом:
echo "Tijt jt b tfdsfu nfttbhf." > ~/project/encoded.txt
Совет: Используйте копирование и вставку для команд создания файлов.
Теперь расшифруем его:
cat ~/project/encoded.txt | tr 'b-za-a' 'a-z'
Вы увидите:
This is a secret message.
Разбор команды:
cat ~/project/encoded.txt: Читает содержимое зашифрованного файла.|: Передает данные командеtr.tr 'b-za-a' 'a-z':- Первый набор 'b-za-a' состоит из:
- 'b-z': буквы от b до z
- 'a-a': буква a
- Таким образом, полный первый набор: b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,a
- Второй набор 'a-z' — это стандартный алфавит: a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z
- Это создает сопоставление, где каждая буква из первого набора заменяется на соответствующую букву из второго:
- b (1-я в первом наборе) → a (1-я во втором)
- c (2-я в первом наборе) → b (2-я во втором)
- ...
- a (26-я в первом наборе) → z (26-я во втором)
- Фактически, это сдвигает каждую букву ввода на одну позицию назад по алфавиту (дешифровка шифра Цезаря).
- Примечание: Команда
trвыполняет замену посимвольно, поэтому затронуты только строчные буквы. Заглавная "T" в начале сообщения осталась без изменений, так как она не совпала ни с одним символом из первого набора.
- Первый набор 'b-za-a' состоит из:
Такой тип подстановки является простейшей формой шифрования, называемой шифром Цезаря. Хотя он не подходит для реальной защиты данных, это отличный пример того, как 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(complement) дополняет набор (означает "все, кроме этого набора"). - Опция
-d(delete) удаляет указанные символы. [:digit:]— класс символов, представляющий все цифры (0-9).- Вместе
-cd '[:digit:]'означает "удалить все символы, которые НЕ являются цифрами".
- Опция
Эта команда полезна для извлечения числовых данных из смешанного текста, что часто требуется при анализе логов или очистке данных.
Сжатие повторов с помощью tr
Команда tr также умеет "сжимать" (squeeze) последовательности повторяющихся символов в один экземпляр. Это полезно для очистки данных от лишних повторов. Создадим файл с лишними пробелами и исправим его.
Сначала создайте файл с множественными пробелами:
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(squeeze-repeats) заменяет последовательность идентичных символов, указанных в наборе, на один такой символ. ' 'указывает, что мы хотим сжать именно пробелы.
- Опция
Эта команда незаменима при работе с плохо отформатированными данными или когда нужно нормализовать отступы в текстовом файле.
Резюме
В ходе этой лабораторной работы мы изучили возможности универсальной команды tr в Linux. Мы научились:
- Менять регистр текста.
- Удалять определенные символы.
- Выполнять замену нескольких символов.
- Использовать классы символов.
- Сжимать повторяющиеся символы.
Команда tr — это мощный инструмент для манипуляции текстом. Вот еще несколько опций, которые мы не рассматривали подробно:
-c: Дополнение набора символов (работа со всеми символами, не входящими в указанный набор).-t: Обрезание первого набора до длины второго набора.
Для решения более сложных задач по обработке текста в будущих уроках вы можете изучить такие команды, как sed и awk.



