Читаем UNIX полностью

Хотя редактор sed способен на гораздо большее, чем мы вам продемонстрировали, включая проверку условий, циклы и ветвления, запоминание предыдущих строк, и, конечно, в нем допустимы многие команды редактора ed, описанные в приложении 1. Тем не менее в основном sed используется так, как было показано; одна или две простые команды редактирования, а не длинные и сложные последовательности. В табл. 4.2 собраны некоторые команды sed, хотя и не приведены операции над несколькими строками.

a\Добавлять строки к выходному потоку, пока одна из них не закончится на \
b labelПерейти на команду: label
c\Заменить строки на последующий текст, как в команде a
dУдалить строку; прочесть следующую входную строку
i\Вставить последующий текст перед следующим выходным потоком
lВыдать строку, напечатав все невидимые символы
pВыдать строку
qВыйти
r fileЧитать file, содержимое его переслать в выходной поток
s/old/new/fЗаменить old на new. Если f=g, заменить все вхождения; f=p, вывод; f=w файл, запись в файл
t labelПроверка: переход на метку, если была замена в текущей строке
w fileЗаписать строку в файл
y/str1/str2/Заменить каждый символ строки str1 на соответствующий символ строки str2 (диапазоны недопустимы)
=Выдать текущую нумерацию входной строки
!cmdВыполнить команду sed cmd, только если строка не выбрана
: labelУстановить метку для команд b и t
{Команды до соответствующей скобки } рассматривать как группу

Таблица 4.2: Сводка команд sed

Редактор sed удобен потому, что позволяет работать с произвольно длинными входными строками. Это "быстрый" редактор, который сходен с редактором ed в интерпретации регулярных выражений и в обработке отдельных строк. Однако, с другой стороны, его возможности запоминания ограничены (трудно запомнить текст от одной строки до другой) — делается только один проход по данным, нельзя двигаться назад, нет способов прямой адресации типа /.../+1: и нет средств для работы с числами, т.е. он является чисто текстовым редактором.

Упражнение 4.5

Измените команды older и newer так, чтобы они не включали файл-аргумент в свой выходной поток. Измените их так, чтобы файлы выдавались в обратном порядке.

Упражнение 4.6

С помощью редактора sed сделайте программу bundle совершенно надежной. Подсказка: в конструкции "документ здесь" слово, отмечающее конец данных, распознается только в том случае, когда оно совпадает со строкой полностью.

<p>4.4 Язык <code>awk</code> поиска и обработки шаблонов</p>

Некоторые ограничения sed преодолены в программе awk. Принцип работы этой программы сходен с принципом работы программы sed, но синтаксически она ближе к языку программирования Си, чем к текстовому редактору. Способ задания команды такой же, как и для sed:

$ awk 'программа' имена_файлов...

но программа другая:

шаблон {действие}

шаблон {действие}

...

Программа awk читает входной поток по одной строке из указанных файлов. Строки сопоставляются с шаблонами по порядку; для каждого шаблона, соответствующего строке, выполняется необходимое действие. Как и в редакторе sed, входные файлы здесь не изменяются.

Шаблоны могут быть регулярными выражениями в sed или более сложными условиями, напоминающими язык Си. Приведем простой пример (такого же результата можно добиться с помощью команды egrep):

$ awk '/регулярное_выражение/ {print}' имена_файлов...

Печатается каждая строка, соответствующая регулярному выражению.

Шаблоны или действия могут отсутствовать. Если отсутствует действие, то по умолчанию печатаются строки, соответствующие шаблону, поэтому команда

$ awk '/регулярное_выражение/' имена_файлов...

Перейти на страницу:

Похожие книги