<Попередній | зміст | Наступна>
tr
Команда tr програма звикла транслітерат символів. Ми можемо розглядати це як свого роду операцію пошуку та заміни на основі символів. Транслітерація – це процес зміни символів з одного алфавіту на інший. Наприклад, перетворення символів з нижнього регістру у верхній є транслітерацією. Ми можемо виконати таке перетворення за допомогою tr наступним чином:
[me@linuxbox ~]$ луна "малі літери" | тр аз АЗ
БУКВИ НИЖНЬОГО РЕГІСТРУ
[me@linuxbox ~]$ луна "малі літери" | тр аз АЗ
БУКВИ НИЖНЬОГО РЕГІСТРУ
Як ми бачимо, tr працює на стандартному вводі і виводить свої результати на стандартний вихід. tr приймає два аргументи: набір символів для перетворення і відповідний набір символів для перетворення. Набори символів можуть бути виражені одним із трьох способів:
1. Перерахований список. Наприклад, ABCDEFGHIJKLMNOPQRSTUVWXYZ
2. Діапазон символів. Наприклад, А-Я. Зауважте, що цей метод іноді стикається з тими ж проблемами, що й інші команди, через порядок зіставлення локалі, тому його слід використовувати з обережністю.
3. Класи символів POSIX. Наприклад, [:верхній:].
У більшості випадків обидва набори символів повинні мати однакову довжину; однак, можливо, щоб перший набір був більшим за другий, особливо якщо ми хочемо перетворити кілька символів в один символ:
[me@linuxbox ~]$ луна "малі літери" | tr [:lower:] А
ААААААААААААААААААААААААААААААААА
[me@linuxbox ~]$ луна "малі літери" | tr [:lower:] А
ААААААААААААААААААААААААААААААААА
Окрім транслітерації, tr дозволяє просто видаляти символи з вхідного потоку. Раніше в цьому розділі ми обговорювали проблему перетворення текстових файлів MS-DOS в текст у стилі Unix. Щоб виконати це перетворення, символи повернення каретки потрібно видалити з кінця кожного рядка. Це можна виконати за допомогою tr наступним чином:
tr -d '\r' dos_файл > unix_file
де dos_файл є файлом, який потрібно конвертувати і unix_file є результатом. Ця форма команди використовує вихідну послідовність \r для представлення символу повернення каретки. Щоб побачити повний список послідовностей і класів символів tr підтримує, спробуйте:
[me@linuxbox ~]$ tr --допомога
[me@linuxbox ~]$ tr --допомога
ROT13: Кільце не дуже секретного декодера
Одне кумедне використання tr полягає у виконанні Кодування ROT13 тексту. ROT13 — це тривіальний тип шифрування, заснований на простому шифрі підстановки. Називати ROT13 «шифруванням» — це щедро; «обфускація тексту» більш точна. Іноді він використовується в тексті, щоб приховати потенційно образливий вміст. Метод просто переміщує кожен символ на 13 місць вгору по алфавіту. Оскільки це половина можливих 26 символів, виконання алгоритму вдруге над текстом відновить його до початкового вигляду. Щоб виконати це кодування за допомогою tr:
луна "секретний текст" | tr a-zA-Z n-za-mN-ZA-M
frperg grkg
Виконання тієї ж процедури вдруге призводить до перекладу:
відлуння "frperg grkg" | tr a-zA-Z n-za-mN-ZA-M
секретний текст
Ряд програм електронної пошти та програми для читання новин Usenet підтримують кодування ROT13. Вікіпедія містить хорошу статтю на цю тему:
http://en.wikipedia.org/wiki/ROT13
tr може виконати ще один трюк. Використовуючи опцію -s, tr може «стиснути» (видалити) повторювані екземпляри символу:
[me@linuxbox ~]$ луна "aaabbbccc" | tr -s аб
abccc
[me@linuxbox ~]$ луна "aaabbbccc" | tr -s аб
abccc
Тут ми маємо рядок, що містить повторювані символи. Вказавши набір “ab” до tr, ми усуваємо повторювані екземпляри літер у наборі, залишаючи без змін символ, який відсутній у наборі («c»). Зверніть увагу, що повторювані символи повинні бути суміжними. Якщо вони не є:
[me@linuxbox ~]$ echo "abcabcabc" | tr -s аб
abcabcabc
[me@linuxbox ~]$ echo "abcabcabc" | tr -s аб
abcabcabc
віджимання не матиме ніякого ефекту.