如何用 sed 将 {\'{\i} 替换为 {\'i}

How to replace {\'{\i} by {\'i} with sed

我正在使用 Papers3 导出 Bibtex 库,但有些重音有错误。许多人缺少花括号,因此在 运行 bibtex 时会出现编译错误。下面是 bib 文件中的一个错误示例:

author = {Combi, J A and Rib{\'o}, M and Mart{\'{\i}, J and Chaty, S.},

我想在我的文件 (agn.bib) 中替换所有这些实例,使用如下内容:

sed "s/{\'{\i}/{\'i}/g" agn.bib

但这没有任何作用,我在 Stack Overflow 上找不到如何做的答案。

您必须转义反斜杠两次;一次用于 shell,一次用于 sed:

sed -i "s/{\\'{\\i}/{\\'i}/g" file

因为反斜杠是两者的元字符。

当你说sed "\\"时,由于双引号,sed实际上收到\,根据基本正则表达式的规则,将反斜杠视为文字字符。

这可能适合您 (GNU sed):

sed -i 's/{\'\''{\i}/{\'\''i}/g' file

通过引用替换 \\ 并通过将其传递给 shell 匹配 a''\''.