regex substitui o texto no arquivo xml no nó da linha de comando

2

Eu tenho um arquivo XML e gostaria de substituir tudo o que está entre a tag de abertura e fechamento em várias instâncias do nó g: gtin sem nada.

Isso é possível a partir da linha de comando, usando sed ou algo semelhante?

<g:gtin>31806831001</g:gtin>
    
por crmpicco 20.04.2012 / 16:50

2 respostas

3

Uma solução simples para casos simples - veja meu comentário:

echo "<g:gtin>31806831001</g:gtin>" | sed 's|<g:gtin>.*</g:gtin>|<g:gtin></g:gtin>|'

Resultado:

<g:gtin></g:gtin>

Depende da suposição de que start e endtag estão na mesma linha e não mais de um tag nessa linha.

Como os arquivos xml geralmente são gerados da mesma maneira, repetidas vezes, a suposição pode ser válida.

    
por 20.04.2012 / 17:18
0

Uma maneira de usar perl :

Conteúdo de script.pl :

use warnings;
use strict;
use XML::Twig;

die qq[Usage: perl $0 <xml-file>\n] unless @ARGV == 1;

my $twig = XML::Twig->new(
    twig_roots => { 
        q[g:gtin] => \&handle_gtin,
    },  
    twig_print_outside_roots => 1,
);

$twig->parsefile( shift );

sub handle_gtin {
    my ($t, $gtin) = @_; 
    $gtin->set_text( q[] );
    $gtin->print;
}

Execute como:

perl script.pl file.xml
    
por 22.04.2012 / 20:30