Você pode usar as ferramentas xml2 / 2xml para processar XML na linha de comando sem muita confusão. xml2
converte um documento XML em um formato orientado por linha, adequado para uso com ferramentas tradicionais de processamento de texto, como awk
ou sed
, e 2xml
assume esse formato e o converte de volta para XML.
Para o seu exemplo, se eu pegar este documento:
<?xml version="1.0"?>
<doc>
<x>
<z>should be changed</z>
</x>
<y>
<z>should NOT be changed</z>
</y>
</doc>
executando xml2
nesse conteúdo:
$ xml2 < doc.xml
/doc/x/z=should be changed
/doc/y/z=should NOT be changed
Eu posso modificar o conteúdo do elemento <z>
como este
xml2 < doc.xml |
sed '/\/doc\/x\/z/ s/should be changed/look ma no hands/' |
2xml | tidyp -xml -i -q
Estou usando uma expressão de pesquisa sed
para procurar explicitamente a linha
começando com /doc/y/z
e, em seguida, modificando o conteúdo dessa linha,
o que nos dá:
<doc>
<x>
<z>look ma no hands</z>
</x>
<y>
<z>should NOT be changed</z>
</y>
</doc>
Eu passei a saída por tidyp
, um formatador XML, porque
caso contrário, o documento ficaria assim:
<doc><x><z>look ma no hands</z></x><y><z>should NOT be changed</z></y></doc>
... que está sintaticamente correto, mas mais difícil de ler.