bash - 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
有人可以解释这里发生了什么以及如何实现正确的替换吗?
解决方案
尝试:
sed "s:':\':g"|sed 's:":\":g'
- 只需要转义&字符,如果您将 sed 表达式放入双引号并需要替换双引号,您也需要转义它,否则使用单引号。
- 同样,如果您将 sed 表达式放入单引号并需要替换单引号,您也需要对其进行转义,否则使用双引号。
推荐阅读
- keycloak - 修复“我们很抱歉需要 HTTPS” Keycloak 登录页面
- c# - 如何将字符串转换为布尔值并评估条件?
- html - 重新运行 ngSwitch
- java - Kubernetes AutoDevOps 上的 PKIX 路径构建失败
- gradle - findByName() 方法为 gradle 插件任务返回 null
- linux - Kali Linux 安装 Bluto
- ubuntu-14.04 - inotifywait 偷偷消耗大量内存
- wiremock - 使用我自己的自签名证书连接到 Wiremock 时出现 SSLHandshakeException
- google-bigquery - 如何比较 Google Bigquery 中的先前行和当前行?
- python - 无法杀死 macOS python 进程