<Предыдущая | Содержание: | Следующая>
tr
Ассоциация tr программа используется для Transliterate символы. Мы можем рассматривать это как своего рода операцию поиска и замены на основе символов. Транслитерация - это процесс смены символов одного алфавита на другой. Например, преобразование символов из нижнего регистра в верхний - это транслитерация. Мы можем выполнить такое преобразование с помощью tr следующим образом:
[я @ linuxbox ~] $ эхо "строчные буквы" | tr az AZ
СТРОЧНЫЕ БУКВЫ
[я @ linuxbox ~] $ эхо "строчные буквы" | tr az AZ
СТРОЧНЫЕ БУКВЫ
В свете вышеизложенного становится ясно, tr работает со стандартным вводом и выводит свои результаты на стандартный вывод. tr принимает два аргумента: набор символов для преобразования и соответствующий набор символов для преобразования. Наборы символов могут быть выражены одним из трех способов:
1. Нумерованный список. Например, АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЫЭЮЯ
2. Диапазон символов. Например, А-Я. Обратите внимание, что этот метод иногда вызывает те же проблемы, что и другие команды, из-за порядка сопоставления языковых стандартов, и поэтому его следует использовать с осторожностью.
3. Классы символов POSIX. Например, [: верхний:].
В большинстве случаев оба набора символов должны быть одинаковой длины; однако первый набор может быть больше второго, особенно если мы хотим преобразовать несколько символов в один символ:
[я @ linuxbox ~] $ эхо "строчные буквы" | tr [: lower:] A
ААААААААААААААА
[я @ linuxbox ~] $ эхо "строчные буквы" | tr [: lower:] A
ААААААААААААААА
Помимо транслитерации, tr позволяет просто удалять символы из входного потока. Ранее в этой главе мы обсуждали проблему преобразования текстовых файлов MS-DOS в текст в стиле Unix. Чтобы выполнить это преобразование, необходимо удалить символы возврата каретки из конца каждой строки. Это может быть выполнено с помощью tr следующим образом:
tr -d '\ r' dos_file > unix_file
в котором dos_file файл, который нужно преобразовать и unix_file это результат. Эта форма команды использует escape-последовательность \r для представления символа возврата каретки. Чтобы увидеть полный список последовательностей и классов символов tr поддерживает, попробуйте:
[я @ linuxbox ~] $ тр --помощь
[я @ linuxbox ~] $ тр --помощь
ROT13: Не секретное кольцо декодера
Одно забавное использование tr это выполнить Кодировка ROT13 текста. ROT13 - это тривиальный тип шифрования, основанный на простом подстановочном шифре. Называть ROT13 «шифрованием» - это великодушно; «Обфускация текста» более точна. Иногда он используется в тексте, чтобы скрыть потенциально оскорбительный контент. Метод просто перемещает каждый символ на 13 позиций вверх по алфавиту. Поскольку это половина возможных 26 символов, повторное выполнение алгоритма с текстом восстанавливает его исходную форму. Чтобы выполнить это кодирование с помощью tr:
эхо "секретный текст" | tr a-zA-Z n-za-mN-ZA-M
фрперг гркг
Повторное выполнение той же процедуры приводит к переводу:
эхо "frperg grkg" | tr a-zA-Z n-za-mN-ZA-M
секретный текст
Ряд почтовых программ и читателей новостей Usenet поддерживают кодировку ROT13. В Википедии есть хорошая статья на эту тему:
http://en.wikipedia.org/wiki/ROT13
tr тоже может проделать еще один трюк. Используя параметр -s, tr может «сжимать» (удалять) повторяющиеся экземпляры символа:
[я @ linuxbox ~] $ эхо "aaabbbccc" | tr -s ab
абссс
[я @ linuxbox ~] $ эхо "aaabbbccc" | tr -s ab
абссс
Здесь у нас есть строка, содержащая повторяющиеся символы. Указав набор «ab» на tr, мы исключаем повторяющиеся экземпляры букв в наборе, оставляя символ, отсутствующий в наборе («c»), без изменений. Обратите внимание, что повторяющиеся символы должны быть рядом. Если это не так:
[я @ linuxbox ~] $ эхо "abcabcabc" | tr -s ab
abcabcabc
[я @ linuxbox ~] $ эхо "abcabcabc" | tr -s ab
abcabcabc
сжатие не даст никакого эффекта.