Command-Line

正則表達式從命令行替換節點內 xml 文件中的文本

  • April 22, 2012

我有一個 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

引用自:https://unix.stackexchange.com/questions/36962