A questão é que o seu padrão de pesquisa contém /
que você está usando como o delimitador de substituição, você precisa usar outro caractere para isso ou escapar do /
:
sed -i 's#<!--UpdateAccountGUIDs>UpdateAndExit</UpdateAccountGUIDs-->#<UpdateAccountGUIDs>UpdateAndExit</UpdateAccountGUIDs>#' File.XML
ou
sed -i 's/<!--UpdateAccountGUIDs>UpdateAndExit<\/UpdateAccountGUIDs-->/<UpdateAccountGUIDs>UpdateAndExit<\/UpdateAccountGUIDs>/' File.XML
Note que você deve nunca usar expressões regulares para analisar [X] HTML .
Por fim, como regra geral, ao trabalhar com expressões regulares, menos é mais. Você deve tentar especificar o padrão exclusivo mais simples possível em vez de repetir todo o texto. Isso não só torna seu código muito mais fácil de ler, mas também evita problemas como o que você estava enfrentando. Por exemplo:
sed -i -r 's/<!--(UpdateAccountGUIDs.+?)-->/<>/' File.XML
Aqui, o -r
habilita a sintaxe da expressão regular estendida para que possamos usar ()
para capturar um grupo (sem a necessidade de escapar dos parênteses) e, em seguida, fazer referência ao texto capturado como . Assim, o comando acima simplesmente procura por um comentário que seja adjacente a
UpdateAccountGUIDs
, estende até o primeiro final da declaração de comentário e, em seguida, faz a substituição.