Команда Linux tr: Преобразование символов

LinuxLinuxBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом практическом занятии (лабораторной работе) мы рассмотрим команду tr в Linux, универсальную утилиту для преобразования текста на уровне символов. Команда tr, сокращение от "translate" (переводить), широко используется для таких задач, как изменение регистра букв, удаление определенных символов и базовая очистка данных. К концу этого практического занятия вы будете свободно использовать команду tr в различных сценариях обработки текста. Это практическое занятие предназначено для начинающих, поэтому не беспокойтесь, если вы новичок в Linux-командах - мы подробно проведем вас по каждому шагу.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/BasicSystemCommandsGroup(["Basic System Commands"]) linux(("Linux")) -.-> linux/BasicFileOperationsGroup(["Basic File Operations"]) linux(("Linux")) -.-> linux/TextProcessingGroup(["Text Processing"]) linux/BasicSystemCommandsGroup -.-> linux/echo("Text Display") linux/BasicFileOperationsGroup -.-> linux/cat("File Concatenating") linux/TextProcessingGroup -.-> linux/tr("Character Translating") subgraph Lab Skills linux/echo -.-> lab-219198{{"Команда Linux tr: Преобразование символов"}} linux/cat -.-> lab-219198{{"Команда Linux tr: Преобразование символов"}} linux/tr -.-> lab-219198{{"Команда Linux tr: Преобразование символов"}} end

Понимание основ команды 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

Разберем эту команду на части:

  1. cat ~/project/greeting.txt: Эта команда считывает содержимое файла.
  2. |: Это символ конвейера (pipe). Он берет вывод команды слева и передает его в качестве входных данных команде справа.
  3. 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

Разберем эту команду на части:

  1. cat ~/project/punctuated.txt: Эта команда считывает содержимое файла.
  2. |: Этот символ конвейера (pipe) передает вывод в команду tr.
  3. tr -d '[:punct:]':
    • Опция -d сообщает команде 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.

Разберем эту команду на части:

  1. cat ~/project/encoded.txt: Эта команда считывает содержимое закодированного файла.
  2. |: Этот символ конвейера (pipe) передает вывод в команду tr.
  3. tr 'b-za-a' 'a-z':
    • Первый набор, 'b-za-a', представляет сдвинутый алфавит, где 'b' рассматривается как 'a', 'c' как 'b' и так далее, при этом 'a' зацикливается на 'z'.
    • Второй набор, 'a-z', представляет обычный алфавит.
    • Таким образом, каждая буква во входных данных сдвигается назад на одну позицию в алфавите.

Такой тип подстановки представляет собой очень простую форму шифрования, называемую шифром Цезаря. Хотя он не является надежным для реального использования, это отличный пример того, как можно использовать команду 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

Разберем эту команду на части:

  1. cat ~/project/log_entry.txt: Эта команда считывает содержимое файла журнала.
  2. |: Этот символ конвейера (pipe) передает вывод в команду tr.
  3. 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.

Разберем эту команду на части:

  1. cat ~/project/spaced.txt: Эта команда считывает содержимое файла с лишними пробелами.
  2. |: Этот символ конвейера (pipe) передает вывод в команду tr.
  3. tr -s ' ':
    • Опция -s "сжимает" повторения указанного символа, оставляя только один экземпляр.
    • ' ' указывает, что мы хотим "сжимать" пробелы.

Эта команда особенно полезна при работе с плохо отформатированными данными или когда нужно нормализовать пробелы в текстовом файле.

Итоги

В этом практическом занятии мы изучили многофункциональную команду tr в Linux. Мы научились:

  1. Преобразовывать регистр текста
  2. Удалять определенные символы
  3. Преобразовывать несколько символов
  4. Использовать классы символов
  5. Удалять повторяющиеся символы

Команда tr представляет собой мощный инструмент для обработки текста. Вот некоторые дополнительные опции, которые мы не рассмотрели подробно:

  • -c: Инвертировать набор символов в строке1, то есть выполнять операцию над всеми символами, не входящими в строку1
  • -t: Обрезать строку1 до длины строки2

Для более сложных задач обработки текста вы можете изучить другие команды, такие как sed и awk, в будущих практических занятиях.

Ресурсы