2011-03-13 56 views
2

我有以下XML:删除或XML的值替换双引号(特定搜索和替换)

<smtng attr="bla"><desc>bla 12" bla</desc></smtng> 

而且我想用一些命令(最好从bash可执行文件),以取代"12&quot;,但保留它为attr="bla"部分...

任何想法?

+0

我没有看到使用字符实体存在的理由。你为什么想这么做? – 2011-03-13 13:15:11

+0

becouse我将这个xml转换为进一步的编辑,并且“在以后的解析中出现问题;) – 2011-03-13 13:18:06

+0

没有正确运行的XML解析器应该会遇到任何问题 – 2011-03-13 13:20:47

回答

1

这可能工作隔离,但你应该使用合适的工具。

sed 's|</\?desc>|\n&|g; s/\(<desc>[^"]*\)"\([^\n]*\n\)/\1\&quot;\2/g;s/\n//g' inputfile 
1
#!/bin/bash 

sed -e $'[email protected]<desc>@\\\n<desc>@' -e $'[email protected]</desc>@</desc>\\\[email protected]' | \ 
while IFS=$'\n\r' read line; do 
    case "${line}" in 
    *"<desc>"*) 
    sed '[email protected]"@\&quot;@' <<<"${line}" 
    ;; 

    *) 
    echo "${line}" 
    ;; 
    esac 
done 

出于懒惰的我编辑我以前的答案在自己的行

+0

谢谢,但我忘了说它的一个行xml .... :( – 2011-03-13 13:39:01

+0

你能编辑你的问题以反映确切的输入吗? – nhed 2011-03-13 13:48:10

+0

好吧,我刚刚完成了它。 – 2011-03-13 14:07:13

0

使用xmlstarlet你可以做到以下几点:

# cf. http://www.exslt.org/str/index.html 
echo '<smtng attr="bla"><desc>bla 12" bla</desc></smtng>' | 
xmlstarlet sel -T -t -m "//smtng/desc" -v "str:replace(.,'&quot;','&amp;quot;')" -n