我正在帮助一位朋友用 LaTeX 写论文,我需要一个“搜索和替换”的快速解决方案。在 Linux 中使用终端,如何找到以下模式:
\caption{*\cite{*}}
并替换\cite
为\protect\cite
我用的是凯特。使用其搜索功能,我最初发现了超过 2000 个匹配项,通过改进搜索,我将其范围缩小到大约 300 个匹配项。但是我需要进一步缩小范围,因为我不想替换所有\cite
.我只想替换\cite
它发生在\caption{}
答案1
假设标题和引文文本不包含特殊字符(特别是*
示例中的第一个不应包含\
,第二个*
不应包含}
),则 GNU sed 正则表达式
s:(\\caption\{[^\]+)(\\cite\{[^}]+\}\}):\1\\protect\2:g
我认为应该有效。如果可能有空的您可能希望将标题和/或引文字符串的+
修饰符更改为*
.您可以使用以下命令来测试它而无需修改文件
sed -nr 's:(\\caption\{[^\]+)(\\cite\{[^}]+\}\}):\1\\protect\2:gp' files
如果这似乎找到并修改了正确的实例,那么您可以使用该选项使其就地修改文件-i
- 如果您尚未处理单独的副本,您可以自动进行备份
sed -i.bak -r 's:(\\caption\{[^\]+)(\\cite\{[^}]+\}\}):\1\\protect\2:g' files
如果 sed 不适合您,在 perl 中也可以使用类似的表达式。其他版本的 sed 应该可以工作,但可能需要对特殊字符进行不同的转义。