Использование программы:
tr [option]... set1 [set2]
Программа tr копирует входной поток со стандартного устройства ввода
на стандартное устройство вывода производя при этом одно из преобразований:
перекодировка символов и возможно уплотнение повторяющихся символов на
выводе;
уплотнение повторяющихся символов (если встречается подряд два или
более одинаковых символа, программа заменяет их одним символом);
удаление символов;
удаление символов и уплотнение повторяющихся символов.
Значением параметра set1 (и, возможно, set2) являются строки
из
символов, которые подвергаются процессу обработки.
Программа воспринимает следующие значения поля option.
-d
-delete
Удалить из входного потока те символы,
которые содержатся в строке
set1.
-s
-squeeze-repeats
Когда используется только этот параметр, то программа заменяет одним
символом те
повторяющиеся символы, которые содержатся в строке set1.
Если используется комбинация параметров -delete и
-squeeze-repeats, то программа производит удаление
тех символов из входного потока, которые содержатся в set1, затем
производится выбрасывание тех повторяющихся символов, которые содержатся в
set2.
-c
-complement
Использовать для операции те символы, которые не входят в строку set1.
Формат значений параметров set1 и set2 повторяет формат
регулярных выражений (см. раздел 4.5), однако эти наборы не
являются регулярными выражениями, а являются последовательностями символов.
Большинство символов просто обозначают самих себя, но используются некоторые
комбинации, которые означают специальные символы. Некоторые комбинации
используются только в set1 и set2 как показано ниже.
Каждая специальная комбинация начинается обратным слешем (знак SPMquot).
a
Знак Control-G.
b
Знак Control-H.
f
Знак Control-L.
n
Знак Control-J.
r
Знак Control-M.
t
Знак Control-I.
v
Знак Control-K.
000
Знак с восьмеричным кодовым представлением 000.
Знак обратный слеш (SPMquot).
Если за обратным слешем будет следовать какой-то символ не указанный в
таблице, то возникнет ошибка.
Интервалы.
Обозначение m-k включает символы m и k и все символы между
ними. Первый символ должен быть ранее второго по алфавиту иначе возникнет
ошибка. Другой пример, запись 0-9 означает то же, что и 0123456789.
Заметим, что tr не поддерживает синтаксис, когда интервалы заключаются
в квадратные скобки.
Повторяющиеся символы.
Запись [C*n] в set2 означает, что символ C должен быть
повторен n раз. Так, запись [y*4] обозначает то же, что yyyy. Запись [C*] в set2 означает, что следует столько раз
повторить символ C, чтобы сделать длину set2 равной длине set1. Если n начинается с 0, то это воспринимается как восьмеричное
число, в противном случае - как десятичное.
Имена классов, которые понимает программа tr даны ниже.
alnum
Буквы и цифры.
alpha
Буквы.
blank
Пробел (по горизонтали).
cntrl
Управляющие символы.
digit
Цифры.
graph
Изображаемые символы (не включая пробел).
lower
Буквы на нижнем регистре.
print
Изображаемые символы (включая пробел).
punct
Символы знаков пунктуации.
space
Горизонтальный или вертикальный пробел.
upper
Буквы верхнего регистра.
xdigit
Шестнадцатеричные цифры.
Классы эквивалентности.
Запись [=C=] обозначает все символы, которые эквивалентны C в каком-то
смысле. Появление классов эквивалентности является относительно новым
намерением поддержать не английские алфавиты. Однако, по всей видимости, не
существует стандартного способа определить классы или их содержание. Поэтому
GNU tr не имеет полной реализации данных классов. Пока tr
поддерживает классы эквивалентности, в каждом из которых имеется одна буква.
Так, [=c=] означает c, а [=b=] означает b и т.д.
Все рассуждения, которые относятся к способу изображения символов, верны
только для знаков латинского алфавита.
Все варианты эквивалентны.
Напомним, что это верно для латинского алфавита.
Когда происходит перекодировка, то строки set1 и set2 обычно
равны по длине. Если эти строки не равны по длине, то возникают
неоднозначности, которые могут интерпретироваться в различных версиях по
разному, т.е. о портабильности использования tr с параметрами set1 и set2 разной длины следует заботиться отдельно.
если set1 длиннее set2 и использован параметр -truncate-set1 (-t), то set1 будет усечена до длины set2. Этот параметр действует только для операции перекодировки.
Рассмотрим примеры работы программы tr. Пусть файл с именем T
содержит строку SPMquot
head T | tr -cs A-Za-z0-9 '\012'
head T | tr -tcs A-Za-z0-9 '\012'
В первом случае мы получим
subsection
а результатом второй строки будет
\subsection{Простые примеры}
В первой строке восьмеричная кодовая комбинация LF расширена до размеров
A-Za-z0-9, все символы не совпадающие с A-Za-z0-9
перекодированы в <LF> (в данном случае все специальные знаки и символы
Кириллицы), из
выводного потока удалены идущие подряд символы <LF>.
Во втором случае первый параметр set1 усечен до одного символа (до
длины set2), а первым символом является восьмеричный код 000.
Поскольку в вводном файле не было символа с кодом 000, то мы и не
видим изменений.
Уплотнение символов подразумевает, что программа tr заменяет любые
два и более одинаковых символа на один символ. Например, заменить все
повторяющиеся переводы строк на один перевод строки:
SPMquottr -s ''"
Удалить все символы с восьмеричным кодом 000:
SPMquottr -d '00'"
Преобразовать все знаки кроме букв и цифр в знаки <LF> и ужать
повторяющиеся знаки <LF>:
SPMquottr -cs '[a-zA-Z0-9]' '[]'"