使用命令行修改 XML 文件的多行

使用命令行修改 XML 文件的多行

看看下面的文本,如何替换多行文本?

<Model500>
ABC
BCD 
CDE
</Model500>
<Model500>
123
234
345
</Model500>

输出可能如下所示

<Model500>
AAA
BBB 
CCC
</Model500>
<Model500>
111
333
555
</Model500>

我想用sed任何与 Bash 一起使用的命令行实用程序来完成此操作。我应该使用循环来完成此任务吗?

答案1

使用适当的工具,在外壳中,是一个很好的:

xmlstarlet edit -L -u "//Model500[1]"  -v "AAA                                                                
BBB
CCC" file.xml

xmlstarlet edit -L -u "//Model500[2]" -v "111                                                               
333
555" file.xml


cat file.xml

表达式//Model500[2]是一个X路径表达式

注意 1

你需要用如下标签将你的 xml 括起来:

<root>
...
</root>

XML 有效。我希望您为了解决问题而剪切了 XML 文件。

注²

您还可以使用,,等等...以及一个适当的 xml 库。

#!/usr/bin/perl

use strict;
use warnings;

use XML::Simple;

my $xml_file = 'file.xml';

my $xml = XMLin(
    $xml_file,
    KeepRoot => 1,
    ForceArray => 1,
);

$xml->{root}->[0]->{Model500}->[0] = "AAA\nBBB\nCCC\n";
$xml->{root}->[0]->{Model500}->[1] = "111\n222\n333\n";

XMLout(
    $xml,
    KeepRoot => 1,
    NoAttr => 1,
    OutputFile => $xml_file,
);

相关内容