从XML值中删除或替换双引号(特定搜索和替换)

时间:2011-03-13 13:11:46

标签: xml bash search replace quotes

我有以下XML:

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

我想使用一些命令(最好是来自bash的可执行文件)将"替换为12 &quot;,但保留attr="bla"部分......

有什么想法吗?

3 个答案:

答案 0 :(得分:1)

#!/bin/bash

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

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

出于懒惰,我编辑了我之前的答案,以便在自己的行上孤立

答案 1 :(得分:1)

这可能有用,但你应该使用正确的工具。

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

答案 2 :(得分: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