簡體   English   中英

使用Perl One Liner替換xml中的標記和值

[英]Replace a tag and value in xml using perl one liner

我需要使用perl one襯墊將日期標簽中的日期值2016-11-02替換為新值

<header>
            <name>V5 CDS Composites</name>
            <version>1.1a</version>
            <date>2016-11-02</date>

    </header>

我可以使用xml libxml來執行此操作,但希望使用perl one內襯以最短的方式執行此操作。 我不能僅使用2016-11-02,因為有多個帶有不同標簽的實例。

我在標記和值都在變量內的外殼中執行此操作

使用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 -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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM