Адрес - это способ выбора строк.Строки могут быть выбраны с использованием нуля, одного или двух адресов.Это никак не связано с емкостью пространства шаблона.
Рассмотрим следующий входной файл:
aaa
bbb
ccc
ddd
eee
Эта команда sed
имеет нулевые адреса, поэтому она обрабатывает каждую строку:
s/./X/
Результат:
Xaa
Xbb
Xcc
Xdd
Xee
Эта команда имеет один адрес, она выбирает только третью строку:
3s/./X/
Результат:
aaa
bbb
Xcc
ddd
eee
Адрес $
, как в $s/./X/
, будет функционировать таким же образом, но для последней строки (независимо от количества строк).
Вот команда с двумя адресами.В этом случае он выбирает строки на основе их содержимого.Это может сделать и одна адресная команда.
/b/,/d/s/./X/
Результат:
aaa
Xbb
Xcc
Xdd
eee
Пространство шаблона печатается при наличии явной команды p
или P
или при сценариизавершается для текущей строки входного файла (которая включает в себя завершение обработки файла с помощью команды q
), если опция -n
(подавить автоматическую печать) отсутствует.
Вотдемонстрация sed
печати каждой строки сразу после ее получения и обработки:
for i in {1..3}; do echo aaa$i; sleep 2; done | sed 's/./X/'
Емкость пространства образца (и пространства удержания) зависит от количества символов, которые оно может содержать (и зависит от реализации)), а не количество строк ввода.Новые строки, разделяющие эти строки, являются просто еще одним символом в этом итоге.Команда G
просто добавляет копию пространства удержания в конец того, что находится в пространстве образца.Несколько приложений команды G
добавляют столько копий.
В учебном пособии, на которое вы ссылались, выдается «Максимальное количество адресов - два».несколько двусмысленно.Это означает, что вы можете использовать ноль, один или два адреса для выбора строк для применения этой команды к .Как и в приведенных выше примерах, вы можете применить G
ко всем строкам, одной строке или диапазону строк.Каждая команда может принимать ноль, ноль или один, или ноль, один или два адреса.См. man sed
в разделе «Синопсис» для подзаголовков, которые группируют команды по числу адресов, которые они принимают.
С info sed
:
3.1 Как работает `sed '
' sed 'поддерживает два буфера данных: активный шаблон пробел и вспомогательный удерживают пробел.Оба они изначально пусты.
«sed» работает, выполняя следующий цикл для каждой строки ввода: во-первых, «sed» читает одну строку из входного потока, удаляет любой завершающий символ новой строки и помещает его в шаблонпространство.Затем команды выполняются;каждая команда может иметь адрес, связанный с ней: адреса являются своего рода кодом условия, и команда выполняется только в том случае, если условие проверено перед выполнением команды.
Когда конец сценариядостигается, если не используется опция '-n', содержимое пространства шаблона распечатывается в выходной поток, добавляя обратно завершающий символ новой строки, если он был удален. (1) Затем начинается следующий цикл для следующей строки ввода.
Если не используются специальные команды (например, 'D'), пространство шаблона удаляется между двумя циклами.С другой стороны, пространство удержания хранит свои данные между циклами (см. Команды «h», «H», «x», «g», «G» для перемещения данных между обоими буферами).