sed lê cada linha, por isso nunca irá corresponder a um padrão de múltiplas linhas, a menos que você o leve na direção certa. O comando N
lê uma linha da entrada e a anexa ao espaço padrão.
sed -i -e '/^<!--$/ {
N; /\n<Connector port="8009" protocol="AJP\/1\.3" redirectPort="8443" \/>$/ {
N; /\n-->$/ {
s/^<!--\n//; s/\n-->$//
}
}
}' /myfile.xml
Provavelmente, se você precisar de um comando diferente de s
, então você deve mudar de sed para awk ou perl. Aqui está um trecho de Perl ligeiramente mais flexível que lida com comentários multilinhas de uma forma mais geral.
perl -i -pe '
if (/<!--/) { $_ .= <> while !/-->/;
s[<!--\n(<Connector port="8009" protocol="AJP/1\.3" redirectPort="8443" />)\n-->][$1];
}' /myfile.xml