sed转义:xpath的单引号

时间:2018-10-28 17:16:46

标签: bash xpath sed xml-parsing escaping

在准备用于使用sed进行xpath解析的XML块时,我试图用xmllint替换单引号。根据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

有人可以解释这里发生了什么以及如何实现正确的替换吗?

1 个答案:

答案 0 :(得分:1)

尝试:

sed "s:':\':g"|sed 's:":\":g'
  1. 只需要转义字符,如果您将sed表达式放入 双引号,需要替换双引号,您也需要转义, 否则为此使用单引号。
  2. 同样,如果将sed表达式放在单引号中并且需要 替换单引号,也需要转义,否则请使用双引号 为此报价。