Редактор sed (stream editor) предлагает большинство средств редактирования ed с идентичными командами. Разница в том, что sed – это сложный фильтр, а ed – интерактивный редактор. Это делает sed более полезным в сценариях командного процессора, когда вы заранее знаете, какие шаги редактирования необходимы для преобразования одного или более файлов (представляющих входной поток символов, которым по умолчанию является ваш стандартный ввод) в файл вывода или поток (по умолчанию – ваш стандартный вывод). Редактор sed можно использовать, задав сценарий команд редактирования, которые не отличаются от последовательностей, вручную вводимых при работе с редактором ed, чтобы преобразовать входной поток в выходной.
Эта программа наиболее часто применятся при написании Shell–программ. Команда sed дает возможность однопроходового редактирования файла:
sed `команда_ed` имя_файла,
где команда_ed – команда редактора ed, которая приложена к содержимому файла. Указанная команда будет относиться ко всему файлу, если только не указаны конкретные строки для редактирования. Результат sed направляется на стандартный выход, который, как вы знаете, может быть переназначен при необходимости.
Настоятельно не рекомендуется направлять вывод sed в тот же файл, к которому вы применяете sed!
Следующий пример показывает, как можно сменить все строки, в которых встречается слово text1, на строки, в которых это слово изменено на text2 или другое слово в файле file:
$ sed s/text1/text2/g file1
Буква g добавлена для случая, если слово text1 появится больше одного раза в какой–нибудь строке.
Если вы хотите сохранить ваши изменения, необходимо переназначить выход sed в файл и после этого применить команду mv:
$ sed s/text1/text2/g file1 > temp
$ mv temp file1
Аналогичным образом производятся удаления из файла, например, строки с номером 3:
$ sed 3d file1
Команда sed часто используется для редактирования содержимого переменных Shell:
$ echo $strip
x–y–z
$ echo $strip|sed s/–/+/g
x+y+z
$
Контрольные вопросы
1. Какие бывают типы редакторов?
2. Чем отличаются строковые редакторы от экранных?
3. Как работает потоковый редактор sed?
4. В каких режимах работает редактор ed?
5. Какие категории команд используются в редакторе ed?
6. Какие способы нумерации строк при адресации существуют в редакторе ed?