Сжатие символов с помощью команды 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.