Структура команд
Большинство команд ed имеют вид:
[addr]C[args]
Где addr - адреса строк, к которым надо применить команду, C - односимвольная команда, args - дополнительные аргументы команды. Адрес addr может отсутствовать, указывать на одну строку или на диапазон строк. По умолчанию, команды редактирования применяется к текущей строке, а файловые команды ко всему буферу.
Адреса
Адреса задаются следующими способами:
По номерам (n обозначает число), как результат поиска регулярного выражения, как смещение относительно известного адреса или как диапазон от адреса до адреса:
n - номер строки. 0 означает строку перед первой;$ - последняя строка в буфере;. - текущая строка. На старте устанавливается в $;/RE/ - первая строка соответствующая регулярному выражению RE. Поиск идёт вниз по тексту Если RE не найдено до конца, то поиск продолжается по кругу с начала. В sed - все строки соответствующие выражению RE.?RE? - то же, что и /RE/. но поиск идёт вверх по тексту . Не актуально для sed.addr+n или addr-n - смещение относительно адреса, например, /RE/+2 или $-3 (четвертая строка с конца);addr1,addr2 - диапазон от и до включительно;[addr1,addr2]g/RE/ - все строки в диапазоне addr1-addr2, соответствующие регулярному выражению RE;[addr1,addr2]v/RE/ - все строки в диапазоне addr1-addr2, не соответствующие регулярному выражению RE;'C - строка, помеченная символом C. Метка устанавливается командой [addr]kC.Диапазон может указываться через точку с запятой. В этом случае если адрес addr2 задан в виде поиска регулярного выражения, то при использовании запятой поиск ведётся от строки, следующей за текущей строкой, а при использовании точки с запятой - от строки, следующей за адресом addr1.
Команды
Общие
q - завершить работуQ - забыть изменения и завершить работуu - отменить изменения, сделанные последней командой редактированияf file - задать текущее имя файла. Удобно если ed запускался без указания имени файла.[addr]r file - вставить содержимое файла после адреса. По умолчанию в конец буфера. r !cmd - выполнить шелловскую команду и вставить её выводe file - удалить содержимое буфера и начать редактировать новый файл. e !cmd - аналогично r !cmd[addr1,addr2]w[ file] - записать буфер в файл (можно указать новое имя)Ввод строк
[addr]a - вставить строки после указанной[addr]i - вставить строки перед указанной[addr1,addr2]с - удалить строки из диапазона и вставить вместо них новыеВ командах вставки признаком конца ввода является строка состоящая из одного символа точки и перевода строки. Для ввода одной точки в строке вводятся две точки.
Печать строк
[addr1,addr2]p - напечатать строки из диапазона[addr1,addr2]n - напечатать строки из диапазона, вставив перед каждой её номер и символ табуляции.Удаление и копирование
[addr1,addr2]d - удалить строки[addr1,addr2]m[addr] - переместить строки в позицию после адреса addr. Если addr==0, то в начало буфера.[addr1,addr2]m[addr] - скопировать строки в позицию после адреса addr.Контекстная замена
s/SRC/DST/opt произвести контекстную замену в строке. Opt: g - все вхождения в строке, i - игнорировать регистр.Регулярные выражения
\( и \)\1, \2...^, ., $ - начало строки, произвольный символ, конец строки* - повторитель предыдущего символа или группы от 0 до бесконечности{m,n} - повторитель от m до n. {m} означает ровно m вхождений; {m,} - по крайней мере m вхождений; {m,n} - любое число вхождений от m до n включительно