我有一个 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>
它取决于这样的假设:起始标签和结束标签位于同一行,并且该行上不超过一个标签。
由于 xml 文件通常以相同的方式一遍又一遍地生成,因此该假设可能成立。
答案2
一种使用方法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