使用 perl one liner 替换 xml 中的标签和值
Replace a tag and value in xml using perl one liner
我需要使用 perl one liner 将日期标签中的日期值 2016-11-02 替换为新值
<header>
<name>V5 CDS Composites</name>
<version>1.1a</version>
<date>2016-11-02</date>
</header>
我可以使用 xml libxml 做到这一点,但我想使用 perl one liner 以最短的方式做到这一点。我不能只使用 2016-11-02,因为有多个带有不同标签的实例。
我在 shell 中执行此操作,其中标签和值在变量中
试试下面的一款衬垫
perl -pe 'my $new_date = "2016-12-12"; s/<date>.+/<date>$new_date<\/date>/g' xml.txt
这里
-p use to iterate the loop on a file and the line gets print after that.
-e for execute the script
还有另一个开关用于执行对原始文件的更改。这是 -i
。然后你想复制原始文件意味着oneliner应该是
perl -i.copy -pe 'my $new_date = "2016-12-12"; s/<date>.+/<date>$new_date<\/date>/g' xml.txt
文件将存储为 .copy 扩展名。
这一行完成了工作并在进行替换之前保存了文件
perl -pi.back -e 's~(?=<date>)[\d-]+(?=</date>)~2016-11-18~' file.xml
使用 perl
和 一个 XML 感知工具:
perl -MXML::Twig -0777 -e '$t=XML::Twig->parse(<>);$_->set_text('2017-01-01') for $t ->get_xpath('.//date');$t->print'
或者也许:
perl -MXML::Twig -0777 -e 'XML::Twig->new(twig_handlers=>{date=>sub{$_->set_text("2017-01-01")}})->parse(<>)->print'
(略短,取决于是否更容易阅读)。
它在技术上比此处的某些替代方案稍长,但它具有作为 实际 XML 解析解决方案的好处。
您也可以改用 parsefile_inplace
,在文件上使用 'sed like'。您可能还会发现设置 pretty_print
很有用,可以重新格式化 XML.
我需要使用 perl one liner 将日期标签中的日期值 2016-11-02 替换为新值
<header>
<name>V5 CDS Composites</name>
<version>1.1a</version>
<date>2016-11-02</date>
</header>
我可以使用 xml libxml 做到这一点,但我想使用 perl one liner 以最短的方式做到这一点。我不能只使用 2016-11-02,因为有多个带有不同标签的实例。
我在 shell 中执行此操作,其中标签和值在变量中
试试下面的一款衬垫
perl -pe 'my $new_date = "2016-12-12"; s/<date>.+/<date>$new_date<\/date>/g' xml.txt
这里
-p use to iterate the loop on a file and the line gets print after that.
-e for execute the script
还有另一个开关用于执行对原始文件的更改。这是 -i
。然后你想复制原始文件意味着oneliner应该是
perl -i.copy -pe 'my $new_date = "2016-12-12"; s/<date>.+/<date>$new_date<\/date>/g' xml.txt
文件将存储为 .copy 扩展名。
这一行完成了工作并在进行替换之前保存了文件
perl -pi.back -e 's~(?=<date>)[\d-]+(?=</date>)~2016-11-18~' file.xml
使用 perl
和 一个 XML 感知工具:
perl -MXML::Twig -0777 -e '$t=XML::Twig->parse(<>);$_->set_text('2017-01-01') for $t ->get_xpath('.//date');$t->print'
或者也许:
perl -MXML::Twig -0777 -e 'XML::Twig->new(twig_handlers=>{date=>sub{$_->set_text("2017-01-01")}})->parse(<>)->print'
(略短,取决于是否更容易阅读)。
它在技术上比此处的某些替代方案稍长,但它具有作为 实际 XML 解析解决方案的好处。
您也可以改用 parsefile_inplace
,在文件上使用 'sed like'。您可能还会发现设置 pretty_print
很有用,可以重新格式化 XML.