Это может работать для вас (GNU sed):
sed '/^line2/!b;s/^/.../;s/$/.../' file
Здесь регулярное выражение отменяется с помощью команды !
, а сама команда b
ветвится до конца всех команд sed,Возможно, более простым примером будет:
sed ' /^lines/bjumphere;bjumpthere;:jumphere;s/^/.../;s/$/.../;:jumpthere' file
Конечно, выше также можно записать:
sed '/^line2/{s/^/.../;s/$/.../}' file
При написании одних строк, заканчивающихся новой строкой (таких как i
,a
, c
, r
, R
, w
и W
команды) и другие команды необходимы, опция -e
может быть вызвана для каждой части сценария sed, например:
sed -e '/^line2/{i\a couple of lines\ninserted before "line2"' -e '}' file
Также можно написать:
sed '/^line2/i\a couple of lines\ninserted before "line2"' file
, если нет последующих команд sed для выполнения, однако, если line2
также необходимо удалить:
sed -e '/^line2/b;!i\a couple of lines\ninserted before "line2 then line2 deleted"' -e 'd' file
Однако лучшим способом было бы использовать команду c
.
sed '/^line2/c\a line changed and a line\nappended for "line2"' file