Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СППО - Лабораторные работы.doc
Скачиваний:
22
Добавлен:
10.11.2019
Размер:
752.13 Кб
Скачать

Лабораторная работа №16. Потоковый редактор sed

Цель работы: освоить базовые принципы работы с потоковым редактором sed.

Необходимые сведения

Редактор sed (Stream EDitor) не является текстовым редактором в обычном понимании. Он представляет собой средство преобразования и отбора данных, поступающих из стандартного ввода. Пользователю достаточно задать последовательность команд для обработки, всю остальную работу sed выполнит за один проход автоматически. При этом исходные файлы остаются без изменения, копия стандартного ввода помещается в буфер редактирования, а изменения перенаправляются на стандартный вывод (по умолчанию) или в файл.

Общий синтаксис использования редактора имеет вид:

sed [options] 'command' [files].

Команды редактирования command рекомендуется заключать в одинарные кавычки, чтобы избежать интерпретации специальных символов.

В качестве options могут выступать:

-n — отключает вывод в стандартный поток. По умолчанию отображается каждая входная строка. Осуществить вывод нужных строк в дальнейшем можно с помощью команды p;

-e — следующей будет команда редактирования. Если используется одна команда, эту опцию указывать необязательно.

Общий синтаксис command следующий:

[addr1,[addr2]][!]command [arguments],

где addr1, addr2 — номера (адреса) строк, над которыми выполняются преобразования, command — односимвольная команда редактирования, arguments — аргументы (требуются некоторым командам).

Указание адреса может иметь вид:

n — строка с номером n;

n,m — все строки с номерами в диапазоне от n до m;

$ — последняя строка;

/pattern/ — все строки, соответствующие базовому регулярному выражению pattern.

Символ ! после указания адреса означает, что будет производиться редактирование строк, не соответствующих диапазону.

Основными односимвольными командами являются p,=,a,i,d,s,q:

[addr1,[addr2]]p — вывод указанных строк;

[addr]= — вывод номеров строк;

a — добавление одной или нескольких строк текста после адресуемой строки; общий синтаксис команды

[addr]a\

text\

text\

text

Здесь addr может быть либо номером строки, либо регулярным выражением. В последнем случае строк может быть несколько. Диапазон адресов указать нельзя.

— вставка текста перед строкой. Работа аналогична предыдущей команде. Общий синтаксис;

[addr]i\

text\

text\

text

[addr1,[addr2]]d — удаление строк;

[addr1,[addr2]]s/pattern1/pattern2[flag] — замена указанного шаблона pattern1 заданным текстом pattern2. В качестве flag может быть указано:

g — замена каждого совпадения с pattern1 (по умолчанию производится только первая подстановка);

p — вывод на экран строки, в которой была сделана подстановка. Если подстановок было несколько, то строка будет выведена соответствующее количество раз.

[addr]q — завершение работы после того, как была достигнута адресуемая строка.

Обычно при работе с sed указывается больше, чем одна команда. Несколько команд редактора можно объединить в группу двумя способами:

[addr1,[addr2]]{command1; command2;… commandN;}

или

[addr1,[addr2]]{

command1

command2

commandN

}

Первый способ больше подходит для набора в командной строке, второй предназначен для записи команд редактора в сценарий.

Примеры:

sed -n '1,10p' textfile — вывод первых 10 строк файла textfile.

sed -n '1,10/Stop/p' textfile — вывод строк из диапазона первых 10 строк, в которых содержится буквосочетание Stop.

sed 's/\.\!/g textfile' — замена всех точек символом !.

echo $PWD | sed 's/^\///g' — удаление начального слэша из имени текущего каталога (замена экранированного символа / на пустую подстроку. Флаг g указывает, что необходимо выполнить все замены).

Ход работы

  1. Сформируйте файл sedtest, в котором последовательно содержатся man-страницы командам sed, vim и awk.

  2. Используя sed, выведите на экран из файла sedtest:

  • только пятую строку;

  • строки с 25 по 50;

  • первые 8 строк;

  • последнюю строку.

  1. Выведите в файл sedstring номера всех строк, в которых содержится слово quote.

  2. Замените все слова quote на quotation sentences. Проверьте выполнение замены выводом номеров строк в файл sedstring2 и сравнением этого файла с файлом sedstring.

  3. Удалите из файла sedstring2 все строки, которые содержат слово note.

  4. С помощью одной команды добавьте перед первой строкой файла sedstring2 строку с фразой This is beginning of file, а после последней — строку с фразой This is the end of file.

  5. Создайте сценарий scriptsed, в котором после 1, 2 и 3 строки файла, указанного в качестве аргумента сценария, добавляются строки:

WARNING!

Manually edited!

Результаты должны записываться в файл sedtest1. Проверьте работу сценария на файле sedtest.

  1. Создайте сценарий scriptsed2, в котором над файлом, указанном в качестве аргумента, последовательно выполняются следующие операции при помощи редактора sed:

  • удаляются строки с 11 по последнюю;

  • в оставшихся строках все символы / заменяются на \;

  • добавление после 10 строки фразы The end of file.

Результаты должны записываться в файл, имя которого указывается во втором аргументе сценария.