Eu tenho um diretório cheio de arquivos XML parecidos com este, para os quais desejo alterar o valor do número do elemento "offset" de 1 para algum outro número
$ cat my.xml
<offset xmlns="">1</offset>
Escrevi várias combinações desse comando sed, mas nada do que tentei foi executado sem erros. Tenho certeza de que preciso escapar de alguns caracteres, mas aqueles que tentei sempre terminam em erros ("token inesperado", "opção desconhecida", etc). Também tentei sem o sinalizador -e, pois realmente não é uma expressão.
sed -i -e s/<offset xmlns="">1</offset>/<offset xmlns="">99</offset>/ *.xml
Qualquer ajuda seria apreciada.
Responder1
Não precisa usar /
no sed, pode usar vírgula por exemplo:
sed -i 's,<offset xmlns="">1</offset>,NEW_TEXT,' FILE
Responder2
Tente isso,
$ sed 's~<offset xmlns="">1~<offset xmlns="">99~g' file
<offset xmlns="">99</offset>
Use um delimitador sed diferente se a entrada contiver barras.
Responder3
Geralmente, você não precisa de tudo isso na s/earch/replace/
função em si e, em vez disso, pode primeiro /address/
e depois condicionalmente /s///
. Isso não só pode ajudar na legibilidade e evitar alguns dos problemas mencionados, mas também pode haver um aumento de desempenho:
sed '/offset xmlns=/s/>1</>99</'
Responder4
Eu substituiria o 17º caractere da linha, que contém o valor:
sed -i 's/^\(.\{17\}\)./\1VALUE/' file.xml
Substitua VALUE pelo novo valor de <offset>
. Por exemplo.
sed -i 's/^\(.\{17\}\)./\18/' file.xml
para alterá-lo para 8.