2016-08-20 64 views
1

我想在XML元素內部轉義雙引號。例如用XML屬性中的實體替換字符

FROM

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

TO

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

我能夠使用到的屬性值隔離SED:

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

有沒有辦法來取代雙引號"&quot;第二組內?

+1

從什麼時候sed支持'。*?'? – melpomene

+0

我看到你有Perl作爲你的標籤之一,這很好,因爲你需要一個像['XML :: Twig']一樣的正確的XML解析器(http://search.cpan.org/~mirod/XML-Twig-3.49 /Twig.pm)sed沒有。你還應該使用['XML :: Entities'](http://search.cpan.org/~sixtease/XML-Entities-1.0002/lib/XML/Entities.pm)來編碼你的文本。 – Borodin

+0

@Borodin曾經擁有。我刪除了「perl」標籤,因爲標題或問題中沒有任何內容與perl相關。 : -/ – melpomene

回答

0

使用perl你可以做一個查找和像這樣替換:

查找:

&quot; 

Live demo

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

或者:

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

與更換如果你沒有5.14,

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