用XML属性中的实体替换字符

时间:2016-08-20 20:11:09

标签: regex perl replace sed

我想在XML元素中转义双引号。例如

<person name="Tiberius Claudius "Maximus"" sex="M">

<person name="Tiberius Claudius &quot;Maximus&quot;" sex="M">

我能够使用sed隔离属性值:

$ cat sample.xml | sed -r 's/(<person name=")(.*)(" sex.*)/\2/'
  Tiberius Claudius "Maximus"

有没有办法在第二组中用"替换双引号&quot;

2 个答案:

答案 0 :(得分:1)

perl -i~ -pe's{<person name="\K(.*?)(?=" sex)}{ $1 =~ s/"/&quot;/gr }eg' sample.xml

或者,如果你没有5.14,

perl -i~ -pe's{<person name="\K(.*?)(?=" sex)}{ ( my $s = $1 ) =~ s/"/&quot;/g; $s }eg' sample.xml

答案 1 :(得分:0)

使用perl,您可以像这样进行查找和替换:

查找

(?<!=)(")(?![^"]*\s+\w+=|[^"]*\/?>)

替换为:

&quot;

Live demo