コマンドラインでノード内のXMLファイルのテキストを置き換える正規表現

コマンドラインでノード内のXMLファイルのテキストを置き換える正規表現

XMLファイルがあり、g:gtinノードの複数のインスタンスで開くタグと閉じるタグの間のすべての項目を何も置き換えないようにします。

sedなどを使用してコマンドラインでこれを実行できますか?

<g:gtin>31806831001</g:gtin>

答え1

簡単な状況の簡単なソリューション - 私の意見を参照してください。

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

結果:

<g:gtin></g:gtin>

開始タグと終了タグが同じ行にあり、行にタグが1つしかないという前提によって異なります。

xmlファイルは通常同じ方法で繰り返し生成されるため、この仮定は本当かもしれません。

答え2

それを使用する1つの方法perl

コンテンツ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;
}

次のように実行します。

perl script.pl file.xml

関連情報