【问题标题】:sed escaping: single quotes for xpathsed 转义:xpath 的单引号
【发布时间】: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


    【解决方案1】:

    尝试:

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

    【讨论】:

    • 非常感谢您的帮助。这个问题原来是不相关的——我将它传递到一个 python 命令中,以便稍后剥离 urlencoding,这会撤消我的替换。我交换了顺序,它现在可以使用原始表达式。
    猜你喜欢
    • 1970-01-01
    • 2015-11-06
    • 1970-01-01
    • 2017-08-05
    • 2020-01-31
    • 1970-01-01
    • 1970-01-01
    • 2020-04-09
    • 2013-01-27
    相关资源
    最近更新 更多