Команда tr
(от translate или transliterate) — это мощный инструмент для обработки текста в Linux, который выполняет:
✔ Замену одних символов на другие
✔ Удаление указанных символов
✔ Сжатие повторяющихся символов
Работает только со стандартным вводом (stdin
), поэтому часто используется в пайплайнах.
1. Базовый синтаксис
tr [ОПЦИИ] "НАБОР_СИМВОЛОВ_1" "НАБОР_СИМВОЛОВ_2"
2. Основные примеры использования
▸ Замена символов (основная функция)
Заменить все a
на X
:
echo "apple banana" | tr 'a' 'X'
# Результат: Xpple bXnXnX
Заменить гласные на *
:
echo "hello world" | tr 'aeiou' '*'
# Результат: h*ll* w*rld
▸ Преобразование регистра
В верхний регистр:
echo "Linux" | tr 'a-z' 'A-Z'
# Результат: LINUX
В нижний регистр:
echo "BASH" | tr 'A-Z' 'a-z'
# Результат: bash
▸ Удаление символов (-d
)
Удалить все цифры:
echo "Phone: 123-456-7890" | tr -d '0-9'
# Результат: Phone: --
Удалить пунктуацию:
echo "Hello, World!" | tr -d '[:punct:]'
# Результат: Hello World
▸ Сжатие повторяющихся символов (-s
)
Заменить множественные пробелы на один:
echo "Text with extra spaces" | tr -s ' '
# Результат: Text with extra spaces
Удалить пустые строки (сжатие \n
):
echo -e "Line1\n\n\nLine2" | tr -s '\n'
# Результат:
# Line1
# Line2
3. Продвинутые техники
▸ Использование предопределённых наборов символов
Набор | Описание | Пример использования |
---|---|---|
[:alpha:] | Все буквы | tr -d '[:alpha:]' |
[:digit:] | Все цифры | tr -d '[:digit:]' |
[:alnum:] | Буквы + цифры | tr -d '[:alnum:]' |
[:space:] | Пробельные символы | tr -s '[:space:]' |
[:lower:] | Строчные буквы | tr '[:lower:]' '[:upper:]' |
[:upper:] | Заглавные буквы | tr '[:upper:]' '[:lower:]' |
Пример: оставить только цифры
echo "ID: A123B456" | tr -cd '[:digit:]'
# Результат: 123456
(-c
означает “всё, КРОМЕ указанных символов”)
▸ Удаление всех непечатных символов
echo -e "Text\x01with\x02control\x03chars" | tr -cd '[:print:]'
# Результат: Textwithcontrolchars
▸ Замена символов через дополнение наборов
Если второй набор короче первого, последний символ дублируется:
echo "abcdef" | tr 'abc' '12'
# Результат: 12ddef (символ 'c' заменён на '2', как последний во втором наборе)
4. Практические примеры
▸ Удаление переносов строк в файле
tr -d '\n' < file.txt > newfile.txt
▸ Подсчёт количества слов
echo "Hello world from Linux" | tr ' ' '\n' | wc -l
# Результат: 4
▸ Генерация паролей
cat /dev/urandom | tr -dc 'a-zA-Z0-9' | head -c 12
# Пример вывода: jK8pQ2vR9sL3
▸ Конвертация Windows → Unix формата (CRLF → LF)
tr -d '\r' < windows_file.txt > unix_file.txt
5. Ограничения tr
❌ Не поддерживает регулярные выражения (используйте sed
для сложных замен)
❌ Работает только с одиночными символами (не с подстроками)
❌ Не изменяет файлы напрямую (только через перенаправление)
Заключение
tr
— это быстрый и удобный инструмент для простой обработки текста в потоковом режиме. Он особенно полезен в комбинации с другими командами (grep
, sort
, awk
) в сложных пайплайнах.
🔗 Дополнительные ресурсы
Если у вас есть конкретная задача — спрашивайте в комментариях! 💡
Добавить комментарий