Эти утилиты оперируют отдельными символами.
Общая запись:
tr [OPTION]... SET1 [SET2]
Утилита `tr' сопирует стандартный ввод в стандартный вывод,
выввполняя одну из следующих операций:
Формат аргументов SET1 и SET2 напоминает формат регулярного выражения, однако, это не регулярные выражения, а просто списки символов. Символы можно задать просто перечисляя их, но, для удобства можно использовать сокращения,описанные ниже. Некоторые из них можно использовать только в SET1 или SET2, как указанно далее.
Запись в виде '\' с последующим символом не указанным ниже является ошибочной.
Запись `M-N' обозначает все символоы от M до N, в порядке возрастания. При чем M при упорядочивании должно стоять перед N; иначе, произойжет ошибка. Например, `0-9' то же самое, что и `0123456789'. Хотя GNU утилита `tr' не поддерживает синтаксис System V, в котором запись промежутков заключаются в квадратные скобки. Преобразования символов заданные в этом формате успешно выполняются, только если квадратным скобкам в SET1 соответствуют квадратные скобки в SET2.
Запись `[C*N]' в SET2 обозначает N повторений символа C. T.е., `[y*6]' то же самое, что `yyyyyy'. А запись `[C*]' в SET2 обозначает столько копий символа C, сколько необходимо чтобы сделать SET2 такой же длины как SET1. Если N начинается с `0', оно интерпретируется в восьмеричной, иначе в десятичной системе.
Запись `[:CLASS:]' обозначает все символы из (предопределенного) класса CLASS. Символы рассматриваются в нестрогом порядке, кроме классов `upper' и `lower', которые рассматриваются в порядке возрастания. Если заданы две опции `--delete' (`-d') и `--squeeze-repeats' (`-s'), то в SET2 можно задать любой класс символов. Иначе, в SET2 можно указывать только классы 'lower' и `upper', и только, если соответстиующий класс (`upper' или `lower', соответственно) задан в той же относительной позиции в SET1. Названия классов приводятся ниже. Если название класса задано неправильно, то произойдет ошибка.
Утилита `tr' производит преобразование символов только если заданны SET1 и SET2, и не указана опция `--delete' (`-d'). `tr' преобразует каждый входной символ представленный в SET1 в соответствующий символ из SET2. Символы не представленные в SET1 не изменяются. Если символ представлен в SET1 больше одного раза, а соответствующие символы из SET2 не идентичны, используется только последний. например следующие две команды эквивалентны:
tr aaa xyz
tr a z
Чаще всего `tr' используется для преобразования символов нижнего
регистра в символы верхнего регистра. Это можно сделать несколькими
способами. Вот три примера:
tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
tr a-z A-Z
tr '[:lower:]' '[:upper:]'
При преобразовании символов, SET1 и SET2 обычно имеют одинаковую
длину. Если SET1 короче чем SET2, лишние символы из SET2 игнорируются.
С другой стороны, если SET1 длиннее чем SET2, то согласно POSIX.2 результат не определен. В этой ситуации, BSD утилита `tr' наращивает SET2 до дилны SET1 повторением последнего символа из SET2. System V утилита `tr' урезает SET1 до длины SET2.
По умолчанию, GNU утилита `tr' обрабатывает этот случай так же как BSD утилита `tr'. Если задана опция `--truncate-set1' (`-t'), GNU утилита `tr' обрабатывает этот случай так же как System V утилита `tr'. Эта опция игнорируется при выполнении других операций.
Например, эффективная для BSD запись бесполезна для System V утилиты `tr':
tr -cs A-Za-z0-9 '\012'
потому что она преобразует только нулевые байты (первый элемент
дополнения множества SET1), вместо всех букв и цифр, в символы
перевода строки.
Если задана только опция `--delete' (`-d'), `tr' удаляет все входные символы встречающиеся в списке SET1.
Если задана только опция `--squeeze-repeats' (`-s'), `tr' заменяет последовательность одинаковых символов на один такой символ, если он указан в списке SET1.
Если заданы обе опции `--delete' и `--squeeze-repeats', `tr' сначала производит удаление используя SET1, и потом сжимает последовательности повторяющихся символов используя SET2.
Опцию `--squeeze-repeats' так же можно использовать, при преобразовании символов, для сжатия оставшихся повторяющихся символов испльзуя SET2.
Здесь представлены нсколько примеров иллюстрирующих различные комбинации опций:
Удаление всех нулевых байт:
tr -d '\000'
Размещение каждого слова в отдельную строку, преобразованием всех не-букв и не-цифр в символы перевода строки и сжиманием полученных последовательностей повторяющихся символов перевода сроки в одиночный символ:
tr -cs '[a-zA-Z0-9]' '[\n*]'
Преобразование последовательностей повторяющихся символов
перевода сроки в одиночные символы:
tr -s '\n'
Установка shell-переменной `POSIXLY_CORRECT' отключает вывод предупреждающих сообщений, для точного соответствия стандарту POSIX.2. Иначе, они выводятся в следующих случаях:
Утилита `expand' последовательно считывает файлы, указанные в качестве аргументов FILE, и выводит их содержимое в стандартный вывод, заменяя табуляцию на пробелы. Если имя файла не указано, или в качестве одного из аргументов задан минус '-', `expand' считывает данные из стандартного ввода.
Общая запись:
expand [OPTION]... [FILE]...
По умолчанию, `expand' преборазует все табуляции в пробелы. Она
сохраняет символы 'забой' для вывода, эти символы уменьшают счетчик
используемый для вычисления табуляций. Табуляция, по умолчанию,
занимет 8 позиций.
Утилита воспринимает следующие опции (см. так же главу 2 'Общие Опции'):
Если задано только TAB1, то позиции табуляции разделяются TAB1 пробелами (по умолчанию 8). Иначе, табуляции устанавливаются в позициях TAB1, TAB2, ... (пронумерованных начиная с 0), и каждая табуляция стоящая после заданной последней позиции табуляции заменяется на один пробел. Если позиции табуляции заданны в опциях `-t' и `--tabs', их можно записывать как через запятую, так и через пробел.
Преобразует в пробелы только начальные табуляции (которым не предшествуют пробелы или другие табуляции) каждой строки.
Утилита `unexpand' последовательно считывает файлы, указанные в качестве аргументов FILE, и выводит их содержимое в стандартный вывод, заменяя последовательные табуляции и пробелы на табуляции. Если имя файла не указано, или в качестве одного из аргументов задан минус '-', `unexpand' считывает данные из стандартного ввода.
Общая запись:
unexpand [OPTION]... [FILE]...
По уолчаню, `unexpand' преобразует только начальные пробелы и
табуляции (перед котрыми нет других пробелов и табуляций) каждой
строки. Она сохраняет символы 'забой' для вывода, эти символы
уменьшают счетчик используемый для вычисления табуляций. Табуляция, по
умолчанию, занимет 8 позиций.
Утилита воспринимает следующие опции (см. так же главу 2 'Общие Опции'):
Если задано только TAB1, то позиции табуляции разделяются TAB1 пробелами, вместо 8 по умолчанию. Иначе, табуляции устанавливаются в позициях TAB1, TAB2, ... (пронумерованных начиная с 0), и все табуляции и лробелы стоящие после заданной последней позиции табуляции не изменяются. Если позиции табуляции заданны в опциях `-t' и `--tabs', их можно записывать через пробел. Эта опция автоматически подразумевает опцию `-a'.
Преобразует наборы из двух или более пробелов или табуляций, исключая начальные, в табуляции.