В большинстве вариантов утилиты tr поддерживаются классы символов и сокращенная запись управляющих символов. В формат класса символов [:class:] среди прочего входят следующие обозначения: alnum (буквенно–цифровые символы), alpha (буквы), blank (пропуски), upper (прописные буквы), lower (строчные буквы), cntrl (управляющие символы), space (пробелы), digit (цифры), graph (графические символы) и т. д. В табл. 12.1 представлен способ сокращенного представления некоторых наиболее распространенных управляющих символов, используемый вместо восьмеричного их представления в виде трех чисел, которое также приведено в данной таблице.
Таблица 12.1. Различные способы указания управляющих символов в утилите tr
Сокращение | Значение | Восмеричное значение |
\а | Control‑G — звонок | \007 |
\b | Control‑H — клавиша возврата на одну позицию | \010 |
\f | Control‑L — прокрутка страницы | \014 |
\n | Comrol‑J — новая строка | \012 |
\r | Control‑M — клавиша возврата каретки | \015 |
\t | Control‑I — клавиша табуляции | \011 |
\v | Control‑X | \030 |
При замене строки или диапазона символов одним символом следует иметь в виду, что этот символ не указывается в квадратных скобках ([]). В некоторых системах допускается применение квадратных скобок, причем в данном случае можно для указания символа новой строки воспользоваться шаблоном ["\0l2"] или "\012". Утилита tr не предъявляет строгих требований к виду кавычек. Поэтому не следует удивляться, если эта утилита действует даже в том случае, если вместо одинарных кавычек используются двойные кавычки.
Подобно большинству системных инструментальных средств, утилита tr восприимчива к специальным символам. Поэтому если требуется выполнить сопоставление с одним из таких символов, следует предварительно отделить этот символ обратной косой чертой. Например, для указания левой фигурной скобки ({) необходимо ввести \{ для отмены специального значения фигурной скобки.
Если нужно сохранить полученные результаты, следует переадресовать их в файл. В приведенном ниже примере выходной результат перенаправляется в файл с именем results.txt. В качестве входного используется файл oops.txt.
$ tr -s "[a‑z]" < oops.txt > results.txt
Обратимся к некоторым примерам использования рассматриваемой команды.
Если проанализировать приведенный ниже файл, можно обнаружить некоторые опечатки. Разумеется, допустить опечатки легко — вспомните, сколько раз во время работы в редакторе vi вы случайно нажимали не те клавиши.
$ pg oops.txt
And the cowwwwws went homeeeeeeee Or did theyyyy
Если нужно избавиться от повторяющихся букв или сократить число подобных букв до одной, можно воспользоваться параметром ' -s'. Также можно воспользоваться шаблоном [a‑z], поскольку в данном случае все символы являются буквенными. При этом входной файл перенаправляется команде tr.
$ tr -s "[a‑z]"< oops.txt
And the cows went home Or did they
Все повторяющиеся символы устраняются. При необходимости файл oops.txt можно перенаправить с помощью команды cat. Результат будет тот же.
$ cat oops.txt | tr -s "[a‑z]"
And the cows went home Or did they
Для удаления пустых строк их следует просто "вытеснить" из файла. Ниже приведен файл с именем plane.txt, содержащий ряд пустых строк.
$ pg plane.txt
987932 Spitfire
190992 Lancaster
238991 Typhoon
В данном случае применяется параметр ' -s', который приводит к удалению пустых строк. Также используется восьмеричное значение для символа новой строки \012. Ниже приведена соответствующая команда.
$ tr -s "[\012]" < plane.txt
987932 Spitfire
190992 Lancaster
238991 Typhoon
С другой стороны, можно воспользоваться сокращенной записью символа новой строки ' \n'. Можно применять как одинарные, так и двойные кавычки, хотя обычно используются двойные кавычки.
$ tr -s "[\n]" < plane.txt
987932 Spitfire
190992 Lancaster
238991 Typhoon