tr(1) основы команды в терминале

НАЗВАНИЕ


tr - выполняет символьное преобразование путём подстановки или удаления символов

СИНТАКСИС


tr [ПАРАМЕТР]... СТРОКА_1 [СТРОКА_2]

ОПИСАНИЕ


Выполняет преобразование, подстановку (замену), сокращение и/или удаление символов поступающих из стандартного входного потока, записывая результат на стандартное устройство вывода. Она часто применяется для удаления управляющих символов из файла или преобразования регистра символов. Как правило, команде tr передаются две строки (набора) символов: первый набор СТРОКА_1 содержит искомые символы, а второй СТРОКА_2 - те, на которые их следует заменить. При запуске команды устанавливается соответствие между символами обоих наборов, а затем начинается преобразование.

ПАРАМЕТРЫ


-c, --complement замещает первый набор символов СТРОКИ_1 его дополнением (всеми символами, отсутствующими в СТРОКЕ_1)

-d, --delete удаляет все символы, которые перечислены в наборе СТРОКА_1, без преобразования

-s, --squeeze-repeats заменяет последовательность повторяющихся символов в наборе СТРОКА_1 на один такой символ (т.е. удаляет все повторяющиеся символы, кроме первого)

-t, --truncate-set1 ограничивает (делает обрезание) набор СТРОКА_1, если он длиннее набора СТРОКА_2

--help выводит помощь по этой команде и завершает работу

--version выводит информацию о версии команды и завершает работу

Итак, СТРОКИ - это строки символов. При указании команде tr содержимого наборов СТРОКА_1 или СТРОКА_2 используются только диапазоны и последовательности символов либо отдельные символы:

\NNN восьмеричное число, состоящее из трёх цифр NNN и представляющее любой действительный символ в коде ASCII

\\ символ обратной косой черты (backslash)

\a символ - звонок (BEL)

\b символ возврата на одну позицию (забой, backspace)

\f символ прокрутки страницы

\n символ новой строки

\r символ возврата каретки (return)

\t символ горизонтальной табуляции (tab)

\v символ вертикальной табуляции

CHAR1-CHAR2 все символы из диапазона от CHAR1 до CHAR2 включительно

[CHAR*] указанный в наборе СТРОКА_2, выполняет копирование символа CHAR в количестве равном длине набора СТРОКА_1

[CHAR*REPEAT] копировать REPEAT раз символ CHAR; если количество повторений REPEAT начинается с 0 - это означает, что оно задано в восьмеричной форме

[:alnum:] все буквы и цифры

[:alpha:] все буквы

[:blank:] все горизонтальные символы пробела (пробел, табуляция)

[:cntrl:] все управляющие символы

[:digit:] все цифры

[:graph:] все печатные символы, исключая пробел

[:lower:] все строчные буквы (нижнего регистра)

[:print:] все печатные символы, включая пробел

[:punct:] все знаки пунктуации

[:space:] все горизонтальные или вертикальные пробелы

[:upper:] все прописные буквы (ВЕРХНЕГО регистра)

[:xdigit:] все шестнадцатеричные цифры

[=CHAR=] все символы, которые эквивалентны символу CHAR

Если заданы оба набора символов и не указан параметр -d, команда tr преобразует каждый символ СТРОКИ_1 в соответствующий символ СТРОКИ_2. Параметр -t используется только при преобразованиях. В случае необходимости, СТРОКА_2 расширяется до длины СТРОКИ_1, повторением её последнего символа. Лишние символы СТРОКИ_2 игнорируются. Гарантированно могут расширяться в порядке возрастания только диапазоны [:lower:] и [:upper:]; используя их во время преобразования в СТРОКЕ_2, они должны быть заданы только в паре, чтобы определить вариант преобразования. Параметр -s использует СТРОКУ_1 в том случае, если не выполняется преобразование или удаление; иначе выполняется сокращение повторяющихся символов с использованием СТРОКИ_2, а после этого выполняется преобразование или удаление.

Следует помнить, что при замене строки или диапазона символов одним символом, этот символ не указывается в квадратных скобках ([]), хотя в некоторых системах допускается применение квадратных скобок, причём для указания, например, символа новой строки можно воспользоваться шаблоном ["\012"] или "\012". Команда tr не предъявляет строгих требований к виду кавычек. Поэтому не следует удивляться, если эта утилита действует даже в том случае, когда вместо одинарных используются двойные кавычки.

Подобно большинству системных команд, tr восприимчива к специальным символам. Поэтому если необходимо выполнить сопоставление с одним из таких символов, его следует предварительно отделить обратной косой чертой, например, \{ - для отмены специального значения фигурной скобки.

ПРИМЕРЫ


Сохранение выходного результата в файл file.out:
$ tr -s "[a-z]" < file.in > file.out

Устранение повторяющихся символов:
$ cat file.in
Andd theee cccoowss wwwweeennt hoommeeee
$ tr -s "[a-z]" < file.in
And the cows went home

Преобразование прописных в строчные:
$ cat MY.FILE | tr "[A-Z]" "[a-z]" > file.my
или
$ cat MY.FILE | tr "[:upper:]" "[:lower:]" > file.my

Удаление пустых строк (восьмеричный код символа \n - \012):
$ tr -s "[\012]" < file.EmptyLines
или
$ tr -s "[\n]" < file.EmptyLines


Удаление определённых символов (в примере удаляются не буквенные символы):
$ cat diary.log
Monday 09:26
Tuesday 11:45
Wednesday 11:30
Thursday 10:56
Friday 09:35
$ tr -cs "[a-z] [A-Z]" "[\n*]" < diary.log
Monday
Tuesday
Wednesday
Thursday
Friday


Преобразование "концов строк" из DOS в UNIX:
$ tr -s "\015\032" "\012" < file.DOS > file.UNIX
или удалить все "ненавистные" символы ^M:
$ tr -d "\r" < file.DOS > file.UNIX
В этом примере показано, что квадратные скобки могут быть, а могут и отсутствовать.

АВТОР


Написана Jim Meyering.

ИНФОРМАЦИЯ ОБ ОШИБКАХ


Если вы обнаружили ошибку в команде tr, сообщите о ней <bug-coreutils@gnu.org>.

АВТОРСКИЕ ПРАВА


Copyright © 2004 Free Software Foundation, Inc. Это свободно-распространяемый продукт; для получения подробных сведений смотрите Универсальную Общественную Лицензию GNU. Этот продукт распространяется БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ; даже без подразумеваемых гарантий КОММЕРЧЕСКОЙ ЦЕННОСТИ или ПРИГОДНОСТИ ДЛЯ КОНКРЕТНОЙ ЦЕЛИ.

ПЕРЕВОД


оригинального файла на английском tr.1.gz (1463 байт от 03.06.2004) (+ дополнения и примеры использования) выполнен Aleksander N.Gorohovski <angel@feht.dgtu.donetsk.ua> 05.07.2007.

Ctrl
Enter
Заметили ошЫбку
Выделите текст и нажмите Ctrl+Enter
883
0
00