tr
Что делает команда tr в Linux
Команда tr в Linux — это утилита командной строки, предназначенная для преобразования, удаления и замены символов в потоке данных. Она часто используется в скриптах, пайплайнах и автоматизации обработки текстов.
Основное назначение команды tr — читать данные из стандартного ввода, изменять их по заданным правилам и выводить результат в стандартный вывод.
Команда tr не редактирует файлы напрямую, а работает в потоковом режиме, что делает её особенно удобной для фильтрации текстов при помощи конвейеров (|).
Пример базового использования:
echo "hello world" | tr 'a-z' 'A-Z'
Результат:
HELLO WORLD
В этом примере команда tr в Linux заменяет все строчные буквы на заглавные.
Основные параметры команды tr в Linux
Команда имеет множество опций, позволяющих гибко управлять преобразованием символов. Рассмотрим ключевые параметры и их использование.
1. Замена символов
Самая распространенная операция — замена одного набора символов на другой.
Пример:
echo "12345" | tr '123' 'abc'
Результат:
abc45
Здесь команда заменяет цифры 1, 2, 3 на буквы a, b, c.
2. Удаление символов с помощью параметра -d
Параметр -d позволяет удалить указанные символы из текста.
Пример:
echo "linux 123 test" | tr -d '0-9'
Результат:
linux test
В данном случае команда tr в Linux удаляет все цифры из строки. Это удобно для очистки логов или текстов от ненужных символов.
3. Сжатие повторяющихся символов с -s
Опция -s («squeeze») удаляет повторяющиеся подряд символы.
Пример:
echo "aaa bbb ccc" | tr -s ' '
Результат:
aaa bbb ccc
Такая операция полезна при обработке файлов с множественными пробелами, табуляцией или другими повторяющимися разделителями.
-s используют в связке с cat или grep, чтобы предварительно «очистить» поток данных.4. Инвертирование набора символов с -c
Опция -c инвертирует указанный набор — то есть выбирает все символы, не входящие в него.
Пример:
echo "abc123!@#" | tr -cd 'a-zA-Z'
Результат:
abc
Здесь команда tr в Linux оставляет только буквы, удаляя все прочие символы.
Частые сценарии использования команды tr в Linux
Замена символов перевода строки на пробелы
Чтобы объединить все строки файла в одну:
tr '\n' ' ' < file.txt
Так команда tr в Linux превращает переносы строк в пробелы. Это удобно, если нужно объединить данные в одну строку для дальнейшей обработки.
Удаление управляющих символов
cat file.txt | tr -d '\r'
Эта команда удаляет символы возврата каретки (\r), часто встречающиеся в файлах Windows-формата.
Преобразование регистра
cat text.txt | tr 'a-z' 'A-Z'
Все буквы будут переведены в верхний регистр. Аналогично можно выполнить обратное преобразование:
cat text.txt | tr 'A-Z' 'a-z'
Использование диапазонов и классов символов
Команда tr поддерживает классы POSIX, которые делают замену более гибкой.
Примеры классов символов:
[:lower:]— все строчные буквы[:upper:]— все заглавные[:digit:]— цифры[:space:]— пробельные символы
Пример использования классов:
echo "Linux 2025" | tr '[:upper:]' '[:lower:]'
Результат:
linux 2025
Практические примеры применения tr в Linux
Пример 1. Очистка текста от лишних символов
cat log.txt | tr -cd '[:print:]\n'
Этот пример удаляет все непечатаемые символы, кроме перевода строки. Очень полезно при обработке логов, где встречаются «мусорные» байты.
Пример 2. Формирование случайных паролей
cat /dev/urandom | tr -dc 'A-Za-z0-9' | head -c 12
Здесь команда tr в Linux используется для фильтрации случайных байтов, оставляя только буквы и цифры, после чего берутся первые 12 символов.
Пример 3. Подсчет количества уникальных символов
cat file.txt | tr -d '\n' | fold -w1 | sort | uniq -c
В связке с другими утилитами команда tr в Linux помогает подсчитывать, какие символы встречаются в тексте и сколько раз.
Комбинирование tr с другими командами
Команда tr в Linux часто используется вместе с cat, grep, cut, awk, sed и другими инструментами обработки текста.
Пример — преобразование вывода одной команды перед анализом:
ps aux | tr -s ' ' | cut -d' ' -f1,2
Здесь tr -s ' ' удаляет лишние пробелы, облегчая дальнейший парсинг вывода.
Заключительный совет
Совет: при использовании команды tr не забывайте, что она работает только с потоками и не изменяет файлы напрямую. Чтобы сохранить результат, перенаправьте вывод в файл:
tr 'a-z' 'A-Z' < input.txt > output.txt
Также полезно помнить, что команда tr не поддерживает регулярные выражения — для сложных шаблонов используйте sed или awk.