Структура команд
Большинство команд 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 включительно