首页 > 解决方案 > sed 转义:xpath 的单引号

问题描述

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

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

标签: bashxpathsedxml-parsingescaping

解决方案


尝试:

sed "s:':\':g"|sed 's:":\":g'
  1. 只需要转义&字符,如果您将 sed 表达式放入双引号并需要替换双引号,您也需要转义它,否则使用单引号。
  2. 同样,如果您将 sed 表达式放入单引号并需要替换单引号,您也需要对其进行转义,否则使用双引号。

推荐阅读