【发布时间】:2019-04-01 17:07:51
【问题描述】:
在准备一大块 XML 以使用 xmllint 进行 xpath 解析时,我正在尝试用 sed 替换单引号。根据 xpath 规范,我应该用' 替换',用" 替换"。以下是我为此设置的sed 表达式:
sed "s/'/\'/g" | sed "s/\"/\"/g"
我知道& 字符指的是初始匹配,所以我转义了,但由于某种原因,这些似乎不起作用。输入xmllint 时,单引号仍然没有转义。截断示例:
XPath error : Invalid predicate
/rss/channel/item[title='...Jeanne d'Arc...']/description
^
XPath evaluation failure
接下来我尝试的是双重转义,但没有效果。但有趣的是,三重转义添加了替换表达式而不删除初始引号!我不明白这里发生了什么:
sed "s/'/\\\'/g" | sed "s/\"/\\\"/g"
XPath error : Invalid predicate
/rss/channel/item[title='...Jeanne d'apos;Arc...']/description
^
XPath evaluation failure
有人能解释一下这里发生了什么以及如何实现正确的替换吗?
【问题讨论】:
标签: bash xpath sed xml-parsing escaping