Полное руководство по команде tr в Linux: замена, удаление и обработка текста

linux

Команда 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) в сложных пайплайнах.

🔗 Дополнительные ресурсы

Если у вас есть конкретная задача — спрашивайте в комментариях! 💡


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *