TGViewer
LinuxCamp | DevOps LinuxCamp | DevOps @linuxcamp_tg · 13.6K subscribers
Post #207 11.7K
Прокачиваемся в tr

Сегодня у нас на разборе одна из культовых утилит "tr". Используется она для форматирования текста: удаления и замены символов.

Чаще всего можно встретить в паре со сторонними командами, которые выводят в stdout текстовый поток: cat, head, echo и т.д.

Команда имеет следующий вид:


$ tr флаг SET1 [SET2]


Сетами представлены наборы символов, с которыми tr будет работать. Второй набор не всегда используется.

Команда разбирает текст посимвольно и выполняет операцию для каждого элемента отдельно.

Флаги команды tr:

1) -d (--delete): удаляет элементы из первого набора:


$ echo "Hello 123 world" | tr -d ' a-zA-Z'
123


2) -c (--complement): обработать каждый символ, который не входит в набор "SET1":


$ echo "Hello 123 world" | tr -cd 'a-zA-Z\n'
Helloworld


В примере мы удалили все символы, которые не входят в перечисление 'a-zA-Z\n';

Таким же макаром можно все буквы удалить и оставить только цифры:


$ cat customer.csv
USA,1234567890
Canada,0987654321

$ cat customer.csv | tr -cd '0-9\n'
1234567890
0987654321


3) -s (--squeeze-repeats): cжимает повторяющиеся символы из первого набора до одного:


$ echo "Hello World" | tr -s ' '
Hello World


4) -t (--truncate-set1): обрезает первый набор до длины второго:


$ echo "abcdef" | tr -t 'abcdef' '123'
123def


Если длина первого набора больше и мы не указываем флаг, каждый последующий его символ, который (по номеру > конец "SET2"), будет заменен:


$ echo "abcdef" | tr 'abcdef' '123'
123333


При своем дефолтном поведении, программа заменяет символы из "SET1" на элементы "SET2":


$ echo "Hello World" | tr 'a-z' 'A-Z'
HELLO WORLD


Команда умеет парсить шаблоны: [:upper:], [:lower:] и т.д. Детальнее можно ознакомиться в мануале:


$ echo "hello world" | tr [:lower:] [:upper:]
HELLO WORLD


Данные на вход можно получить и через файлик. Для этого мы используем перенаправление:


$ cat infile
www.baeldung.com

$ tr 'a-z' 'A-Z' < infile
WWW.BAELDUNG.COM


Измененные данные нужно куда-то записать? Правильно, перенаправляем вывод:


$ tr 'a-z' 'A-Z' < infile > outfile


LinuxCamp | #utils
  • 🔥 40
  • 👍 29
  • ❤‍🔥 5
  • ❤ 4
  • 🎉 1
  • 🌭 1
More from @linuxcamp_tg
  1. Sep 28, 2026Проекту GNU вчера исполнилось 43 года 1983 год: Ричард Столлман объявил планы разработать…
  2. Sep 25, 2026Linux будет работать на ноутах с Snapdragon X2. Qualcomm добавляет полноценную поддержку L…
  3. Sep 24, 2026Так все по делу)) Советует же самый быстрый фикс LinuxCamp | #memes
  4. Sep 23, 2026Планы на 3 октября — прийти на RWB Infra x Security Meetup Мы направим прожекторы на инфра…
  5. Sep 22, 2026Ещё одна рекордная неделя для AI-разработки в Linux. На прошлой неделе в ядро попало 1 634…
  6. Sep 17, 2026Открыл плейлист, а как выйти - непонятно 😁 LinuxCamp | #memes
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →