
Пример 1.3. Применение адреса.sed '1d' test.c
Так-же как и в ed, доступны адресные выражения, например:
Применение адресных выражений в sed.
В отличие от ed, sed применяет команду к каждой строке (если не указан адрес).
sed обычно выводит обработанные строки, но тут я применил команду p, которая то-же выводит строку, потому строки удваиваются.
Как видите, такой скрипт приводит к удвоению каждой строки.
printf("тестовый файл\n");
printf("тестовый файл\n");
Пример 1.2. Простейший скрипт.(файл test.c приведён выше)
К примеру рассмотрим самый просто sed-скрипт:
Вообще говоря, sed-скрипт необязательно заключать именно в одиночные кавычки, иногда его можно вообще оставить без всяких кавычек, однако, в этом случае его попытается раскрыть оболочка, что может привести к неожиданным последствиям. При этом, правильная работа скрипта будет зависеть от множества случайных причин, иногда он будет работать, иногда - нет. Более подробно этот вопрос будет рассмотрен ниже.
Предостережение
Основное отличие sed от cat заключается в том, что sed ещё и может обрабатывать текст. Для этого нужно написать особый sed-скрипт, команды в котором в большинстве своём заимствованны из вышеописанного редактора ed.
Далее sed последовательно читает все три файла, применяя к каждой строке в них sed-скрипт (пустой в данном случае). Результат выводится в выходной поток. Вот тут действие sed заканчивается, и опять начинает работать оболочка, последовательно записывая весь вывод в файл all.html. Потому код cat примитивен (пара строк на C), она просто читает входные файлы и выводит их в выходной поток, без всякой обработки, поисков и слияний. (Правда cat ещё и может нумеровать строки с ключом -n).
'' - пустой скрипт.1.html2.html3.html
Так получилось потому, что ни cat, ни sed на самом деле не объединяет файлы. Сначала действует оболочка, раскрывая *.html в отсортированный по алфавиту набор файлов, к пример, если у нас есть 3 файла 1.html, 2.html, и 3.html, то sed получит 4 параметра:
В кавычках я набрал необходимый для утилиты sed-скрипт, в данном случае пустой, потому sed никак не изменит текст. Набрав эту команду мы не увидим ничего, кроме курсора - по умолчанию sed читает входной поток с клавиатуры, и выводит его на экран (как и cat), мы можем так-же перенаправить выходной поток в файл, к примеру sed '' > dest.txt, а можем скопировать один файл в другой: sed '' src.txt > dest.txt, ну и как в случае с cat, мы можем объединять файлы: sed '' *.html > all.html.
sed-команды задаются первым параметром, наберём к примеру sed ''.
Утилита sed создана в полном соответствии с принципами UNIX-Way, и пользоваться ей можно так-же как и другими командами shell. sed ближе всего к cat, фактически это тоже самое, отличие лишь одно: cat просто копирует текст, а sed этот текст может и обрабатывать. Для обработки утилитой sed необходимо задать особые sed-команды, впрочем мы вправе никаких команд и не задавать, и тогда получим полный аналог cat (за исключением некоторых незначительных деталей).
Использование sed.Использование sed. PГлава 1. Краткий учебник про sed.P Использование sed. Как работает sed?