Command-Line
正則表達式從命令行替換節點內 xml 文件中的文本
我有一個 XML 文件,我想用任何內容替換 g:gtin 節點的多個實例中的打開和關閉標記之間的所有內容。
這可以從命令行使用 sed 或類似的東西嗎?
<g:gtin>31806831001</g:gtin>
簡單案例的簡單解決方案 - 請參閱我的評論:
echo "<g:gtin>31806831001</g:gtin>" | sed 's|<g:gtin>.*</g:gtin>|<g:gtin></g:gtin>|'
結果:
<g:gtin></g:gtin>
這取決於開始和結束標籤在同一行上的假設,並且該行上不超過一個標籤。
由於 xml 文件通常以相同的方式生成,一遍又一遍,假設可能成立。
一種使用方式
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