sed
pode usar quase qualquer caractere como um delimitador para sua expressão, achei melhor não usar um delimitador que esteja na cadeia de caracteres que está tentando substituir para limitar erros de escape.
sed -e 's!/p>!/h3\>!g' new_exp_dev02.xml
substitui /p>
por /h3>
. O e comercial ( &
) na substituição precisa ser escapado, pois esse caractere tem um significado especial nas expressões de substituição sed
.
Sua expressão sed
postada é muito difícil de ser lida e não tenho certeza do que você está tentando alcançar com ela, mas parece que ela tem uma meta diferente, então "substitua /p>
part por /h3>
."
EDIT: se você tiver que escrever a expressão nesse formato longo, isso deve funcionar:
sed -e 's!\(<h3>Styled here with:.*\)/p>!/h3\>!g' new_exp_dev02.xml
Isso coloca a parte combinada inteira além de /p>
em uma referência anterior, que podemos usar na seção de substituição como . Você não pode usar a expressão regular no lado de substituição de uma substituição
sed
, já que as expressões regulares são usadas apenas para correspondência.
A primeira expressão nesta resposta substituirá todas as ocorrências de /p>
com /h3>
, a segunda expressão só substituirá /p>
se ocorrer imediatamente após corresponder à expressão regular "<h3>Styled here with:.*"