我正在幫助一位朋友用 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 應該可以工作,但可能需要對特殊字元進行不同的轉義。