Шрифт:
Ниже приведен текстовый файл, при пересылке которого не было выполнено преобразование символов возврата каретки. Файл содержит часть требования на выдачу канцелярских принадлежностей. Управляющие символы файла отображены ниже с помощью команды cat -v.
$ cat -v stat.txt
Boxes рарег^^^^^^12^M
Clips metal^^^^^^^50^M
Pencils-medium^^^^^^10^M ^Z
В этом файле последовательность символов '^^^^^^' кодирует символы табуляции, каждая строка завершается управляющей последовательностью control-m, а в конце файла находится управляющая последовательность Control-Z. Ниже показано, как можно исправить положение.
В данном случае придется воспользоваться параметром '~s'. Если обратиться к таблице кодов ASCII, то восьмеричный код символа '^' равен 136. Соответствующее значение для управляющей последовательности ^M равно '015', для символа табуляции — '011', а для управляющей последовательности ^Z — '032'. Данная задача выполняется поэтапно.
Для замены в рассматриваемой команде последовательности символов '^^^^^^' символами табуляции используется следующий шаблон: "\136" "[\011*]". Затем полученные результаты перенаправляются во временный рабочий файл с именем stat.tmp.
$ tr -s '[\136]" "[\011*]" < stat.tr > stat.tmp
Boxes paper 12^M
Clips metal 50^M.
Pencils-medium 10^М
^Z
Для замены управляющих последовательностей ^M, расположенных в конце каждой строки, символом новой строки и устранения управляющей последовательности ^Z применяется шаблон \n. Не следует забывать, что входные данные поступают из временного файла stat.tmp.
$ tr -s "[\015\032]" "\n" < stat.tmp
Boxes paper 12
Clips metal 50
Pencils-medium 10
Таким образом, управляющие символы удаляются и файл готов к применению.
12.1.9. Быстрые преобразования
Если из файла необходимо удалить только управляющие последовательности ^M и заменить их символами новой строки, для этого применяется команда:
$ tr -s "[\015]" "\n" < файл_ввода
С другой стороны, для получения аналогичного результата можно воспользоваться командой:
$ tr -s "[\r]" "[\n]" < файл_ввода
То же самое преобразование можно выполнить и с помощью команды:
$ tr -s "\r" "\n" < файл_ввода
Еще один распространенный вариант преобразования файлов, перенесенных из DOS в UNIX, иллюстрирует команда:
$ tr -s "[\015\032]" "[\012*]" < файл_ввода
Эта команда удаляет управляющие последовательности ^M и ^Z и заменяет их символами новой строки.
Следующая команда удаляет символы табуляции, заменяя их пробелами:
$ tr -s "[\011]" "[\040*]" < файл_ввода
Для замены в файле пароля passwd всех двоеточий символами табуляции, двоеточие следует заключить в кавычки и указать в строке замены восьмеричное значение символа табуляции, которое равно '011'. Файл станет более удобным для чтения. Сначала приводится файл passwd, а затем команда с утилитой tr, которая выполняет задачу.
$ pg passwd
halt:*:7:0:halt:/sbin:/sbin/halt
mail:*:8:12.mail:/var/spool/mail:
news:*:9:13:news:/var/spool/news:
uucp:*:10:14:tmcp:/var/spool/uucp:
$ tr -s "[:]" "[\011]" < passwd
halt
*
7
0
halt
/sbin /sbin/halt
*
8
12
/var/spool/mail
news
*
9
13
news
/var/spool/news
uucp
*
10
14
uucp
/var/spool/uucp
С другой стороны, аналогичного результата можно добиться с помощью следующей команды, где указывается сокращенная запись символа табуляции:
$ tr "[:]" "[\t]" < passwd
12.1.10. Сравнение с несколькими символами
Для выполнения сравнения с несколькими символами применяется формат [character*n]. Ниже приводится содержимое файла, описывающего жесткие диски системы. В файле содержатся диски, которые зарегистрированы или распознаны системой. Первый столбец содержит числа. Если этот столбец не состоит из одних нулей, то регистрируется соответствующий диск во втором столбце.