З офіційного опису легко зрозуміти цінність цього інструменту. Linux пропонує велику колекцію вбудованих інструментів. Є кілька спеціальних, які надзвичайно корисні для обробки тексту. Ми вже розглянули ряд таких, як Vim, Nano, awk, sed та інші інструменти.
Тим, хто регулярно працює з текстами, "tr", безумовно, буде дуже, дуже корисним. Ця стаття проілюструє найбільш поширене вживання “tr” на достатніх прикладах.
Примітка: У підручнику буде використано тонну фіктивних файлів із випадковим вмістом. Всі випадкові рядки генеруються Випадкові.орг.
Розташування
який тр
Це повний шлях інструменту команди “tr”.
Основне використання
Для використання інструменту “tr” вам слід використовувати таку структуру команд.
трІснують різні варіанти та способи маніпулювання текстами за допомогою “tr”. Спочатку давайте перевіримо цей демонстраційний файл.
демонстрація котів.txt
Усі символи в нижньому регістрі, праворуч? Давайте перетворимо їх на великі літери!
демонстрація котів.txt | tr [: нижній:] [: верхній:]
Тут перший параметр "tr" вказує на виконання перекладу для всіх малих символів введення. Друга частина говорить про перетворення їх у верхній регістр на виході.
А тепер давайте зробимо все навпаки.
демонстрація котів1.txtдемонстрація котів1.txt | tr [: верхній:] [: нижній:]
Існує також інший спосіб виконання цього самого завдання. Давайте перевіримо це.
демонстрація котів.txt | tr [a-z] [A-Z]
Тепер, замість того, щоб говорити “tr”, щоб перекласти великі регістри в малі або малі регістри у великі, ми сказали визначити записи, що відповідають діапазону “a” до “z”, і перевести їх еквівалент із діапазону “A” на “Z”.
Цей подібний метод також може бути використаний для перекладу великої та малої літер.
демонстрація котів1.txt | tr [A-Z] [a-z]
Гра з цифрами
Ми бачили, як перекласти велику літеру на малу, справа? Пора пограти з цифрами.
За допомогою наступної команди ми можемо легко перевести всі цифри (0-9) в їх еквівалентні символи!
cat demo_digit.txtcat demo_digit.txt | tr [0-9] [a-z]
Приголомшливо! Як щодо великих?
cat demo_digit.txt | tr [0-9] [A-Z]
Просто, але цікаво, правильно? Ми також можемо перетворити символи в цифри!
cat demo_lowercase.txtcat demo_lowercase.txt | tr [a-z] [0-9]
О, о, здається, все зламалося, так? Ну, ми можемо використовувати лише "a" до "j" для представлення одноцифрових цифр. Якщо є який-небудь символ, який вийшов за межі, “tr” замінить символ на “]”.
Видалення символів
Як випливає з офіційного опису, “tr” може робити не лише переклад символів. У наступному прикладі ми перевіримо, як використовувати “tr” для видалення певних символів.
кішка випадкова.txt
Тепер видалимо всі цифри зі змісту.
кішка випадкова.txt | tr -d [0-9]
Тут прапорець "-d" означає "tr" видалити, а [0-9] означає цифри для видалення.
Ми також можемо зробити це з героями. Наступна команда збереже всі цифри, але видалить всі символи.
кішка випадкова.txt | tr -d [a-z]
Як щодо видалення лише одного конкретного символу з файлу?
cat demo_lowercase.txtcat demo_lowercase.txt | tr -d 'y'
Він видалив із файлу всі записи "y".
Стискання повторюваних символів
Бувають випадки, коли символ повторюється послідовно. Якщо ви маєте справу з такими набридливими проблемами, просто нехай “tr” подбає про це! Використовуючи наступну команду, ви можете стиснути подібні випадки. По суті, він зберігає початкову появу символу та видаляє додаткові.
По-перше, час перевірити, як виглядає демонстраційний файл.
кішка дублікат.txt
Тепер передайте вміст на "tr".
кішка дублікат.txt | tr -s [: цифри:]
Тут параметр “-s” є показником виконання дії “стискання”.
Розбиття / злиття речень
Давайте перевіримо демонстраційний файл.
кажан дублікат.txt
Він містить речення з пробілами, що розділяють слова, праворуч? Розділимо слова на нові рядки.
кішка дублікат.txt | tr "" "\ n"
Ця команда замінила всі пробільні символи символами нового рядка.
Давайте знову об’єднаємо розбите речення у довге речення.
кажан дублікат.txtкішка дублікат.txt | tr "\ n" ""
Переклад символів
Подібно до того, як ми перекладали символи раніше, цього разу ми будемо робити те саме, але лише з одним символом.
демонстрація котів.txt
У цьому файлі давайте змінимо всі символи нового рядка на крапку з комою.
демонстрація котів.txt | tr "\ n" ";"
Мені довелося обернути це навколо “відлуння”. В іншому випадку це створить певний результат, оскільки останній символ нового рядка також буде переведений у крапку з комою.
Існує інший спосіб зміни персонажів. Однак цим важче керувати.
кішка дублікат1.txtкішка дублікат1.txt | tr -c 'd' 'z'
кішка дублікат1.txt | tr -c 'd' 'z'
Ого! Давайте обернемо його навколо “echo”, щоб краще зрозуміти результат.
echo $ (дублікат кота1.txt | tr -c 'd' 'z')
Що тут сталося? Використовуючи прапор “-c”, “tr” лише збереже цільовий символ незмінним. У разі невідповідності кожен інший персонаж буде перетворений. Тут будь-який символ, крім "b", був замінений на "z".
Переклад рядків
“Tr” також може працювати зі рядками. Давайте виконаємо заміну рядків.
кішка дублікат1.txtкішка дублікат1.txt | tr "дублікат" "not_duplicate"
Мій рядок для заміни коротший за рядок, який потрібно замінити, тому він не підходить.
Набори символів
На даний момент ви помітили, що існує ряд наборів символів, які підтримує "tr". Хоча низка з них була використана у наведених вище прикладах, інші набори символів також дуже корисні. Ось список усіх підтримуваних списків символів.
Набори символів POSIX
- [: цифра:]: Цифри 0-9
- [: alpha:]: Абетки a-z та A-Z.
- [: alnum:]: Буквено-цифрові символи
- [: punct:]: Знаки пунктуації
- [: пробіл:]: Будь-який пробіл, наприклад, пробіл, вкладка, FF, CR, NL, FF тощо.
- [: верхній:]: Усі великі букви
- [: нижній:]: Усі малі літери
- [: cntrl:]: Усі контрольні символи (NL, CR, EXT, STX, ACK, SO, DC1, DC2, NAK, ETB, ESC, IS1, IS2, DEL тощо).)
Додаткові набори символів
- [A-Z]: Усі великі букви
- [a-z]: Усі малі літери
- [0-9]: Усі цифри
Заключні думки
Існує безліч способів, як усі ці особливості "tr" можуть принести користь користувачам. Я завжди рекомендую ознайомитись із усіма доступними опціями та поглибленими посібниками щодо будь-якого інструменту Linux на їхніх сторінках про людину, інформацію та довідку, оскільки вони можуть запропонувати більш цінні знання.
tr --допомогалюдина тр
інфо тр
Насолоджуйтесь!