Команды редактора ed

Структура команд

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