sed
по умолчанию обрабатывает строку;если вы хотите проверить, следует ли за другой строкой пустая строка, вы должны написать sed
сценарий для ее реализации.
Я бы вместо этого использовал Awk или Perl для этой конкретной задачи.
perl -p0777 -i -e 's/connection\n\n-url/connection-url/' file
awk '/^connection/ { c=1; next }
c && /^$/ { c++; next }
c && /^-url/ { $1="connection" $1; c=0 }
c { print "connection-";
while(--c) print "" }
1' file >file.new
Perl, как и sed
, имеет опцию -i
для замены файла на месте.GNU Awk имеет расширение, чтобы сделать то же самое (ищите -i inplace
), но оно не переносимо для меньших Awks.
Опция Perl -0777
заставляет весь файл ворчать впамять как одна «строка», перевод строки (\n
) и все.Если файл очень большой, это, очевидно, будет проблематично.
Скрипт Awk заботится о том, чтобы вернуть пропущенные строки, если он все-таки оказался ложным.