Сжатие символов с помощью tr
Еще одной полезной возможностью команды tr является ее способность "сжимать" повторяющиеся символы, заменяя последовательные вхождения одного и того же символа на один экземпляр. Эта функциональность особенно ценна при работе с текстом, содержащим избыточные пробелы или другие повторяющиеся символы.
Опция сжатия в команде tr
Для сжатия повторяющихся символов с помощью команды tr используется опция -s, за которой следует набор символов, которые вы хотите сжать:
tr -s SET1
Где SET1 - это набор символов, которые вы хотите сжать.
Создание примерного текстового файла с избыточными пробелами
Создадим примерный файл с избыточными пробелами, который можно использовать для практики:
echo 'Error: Too much whitespace.' > ~/project/whitespace.txt
Эта команда создает файл с именем whitespace.txt в директории /home/labex/project с текстом, включающим несколько последовательных пробелов.
Сжатие пробелов в тексте
Теперь используем команду tr с опцией -s для сжатия нескольких пробелов в один:
tr -s ' ' < ~/project/whitespace.txt
При выполнении этой команды вы должны увидеть следующий вывод:
Error: Too much whitespace.
Обратите внимание, что несколько пробелов между словами были заменены на один пробел, что делает текст более читаемым.
Понимание команды
Разберем, что произошло:
tr -s ' ' информирует команду сжать повторяющиеся вхождения символа пробела в один пробел.
- Символ
< перенаправляет содержимое файла ~/project/whitespace.txt в качестве входных данных для команды tr.
- Результат отображается в терминале, но не сохраняется в файл.
Сохранение вывода в новый файл
Если вы хотите сохранить текст с сжатыми пробелами в новый файл, вы можете использовать перенаправление вывода:
tr -s ' ' < ~/project/whitespace.txt > ~/project/clean_whitespace.txt
Для проверки содержимого нового файла используйте команду cat:
cat ~/project/clean_whitespace.txt
Вы должны увидеть:
Error: Too much whitespace.
Комбинирование операций команды tr
Команда tr позволяет комбинировать операции. Например, вы можете одновременно переводить символы и сжимать их в одной команде:
tr 'a-z' 'A-Z' -s ' ' < ~/project/whitespace.txt
Эта команда преобразует все строчные буквы в заглавные и также сжимает несколько пробелов в один.
Создание более сложного примера
Создадим более сложный пример для практики:
echo 'log entry: error code 404 not found' > ~/project/complex.txt
Теперь используем tr для преобразования всех букв в заглавные и сжатия пробелов:
tr 'a-z' 'A-Z' -s ' ' < ~/project/complex.txt > ~/project/processed_complex.txt
Для просмотра результата:
cat ~/project/processed_complex.txt
Вы должны увидеть:
LOG ENTRY: ERROR CODE 404 NOT FOUND
Теперь вы научились использовать команду tr для сжатия повторяющихся символов в тексте. В сочетании с возможностями перевода и удаления, которые вы узнали ранее, это дает вам мощный инструментарий для манипуляции текстом в Linux.