Existe uma ferramenta de linha de comando que pode remover comentários de um arquivo XML? Ou preciso escrever um pequeno programa que utilize um analisador XML para fazer isso?
Atualizar: não estou interessado em soluções que lidem apenas com um subconjunto de todos os arquivos XML possíveis.
Por exemplo, um regexp não pode lidar com a análise de XML.
Responder1
Eu faria desta forma:
cat myfile.xml | sed '/<!--.*-->/d' | sed '/<!--/,/-->/d' > cleaned.xml
Ou:
awk 'in_comment&&/-->/{sub(/([^-]|-[^-])*--+>/,"");in_comment=0}
in_comment{next}
{gsub(/<!--+([^-]|-[^-])*--+>/,"");
in_comment=sub(/<!--+.*/,"");
print}'
Ou:
xmlstarlet ed -d '//comment()' file.xml
Responder2
Para expandir a resposta principal. Se você deseja excluir apenas o comentário e não a linha inteira, você provavelmente deveria usar:
sed 's/<!--.*-->//'
No meu caso, eu tinha um arquivo XML reduzido onde todo o conteúdo estava em uma única linha e como a solução anterior excluiria toda a linha onde o comentário estava localizado, limparia completamente meu arquivo.
Responder3
Isso é bom para limpar comentários de múltiplas linhas (como testes com falha) de um xml, pelo menos aqueles que você escolheu a dedo e são úteis para o usuário final:
perl -i -w -0777pe 's/<!--(.(?<!(HELP|TODO)))*?-->//sg' somefile.xml
mais sobre regex relacionado:https://stackoverflow.com/a/1240293/1422630
Se houver uma maneira de obter o mesmo resultado, mas usando xmlstarlet, eu preferiria, pois pode haver alguma exceção que o regex pode não tratar, mas por enquanto é isso que tenho que usar.