我有以下XML:
<smtng attr="bla"><desc>bla 12" bla</desc></smtng>
我想使用一些命令(最好是来自bash的可执行文件)将"
替换为12
"
,但保留attr="bla"
部分......
有什么想法吗?
答案 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@"@\"@' <<<"${line}"
;;
*)
echo "${line}"
;;
esac
done
出于懒惰,我编辑了我之前的答案,以便在自己的行上孤立
答案 1 :(得分:1)
这可能有用,但你应该使用正确的工具。
sed 's|</\?desc>|\n&|g; s/\(<desc>[^"]*\)"\([^\n]*\n\)/\1\"\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;')" -n