我得到了一个巨大的LaTeX文件,其中包含对数字的错误引用,例如它说
DictVectorizer
应该在哪里
"... So in the figure 3-12 we see ... similar to figure 3-1..."
为了节省时间,愚蠢的我,我找了一个像以下一样找到/替换:
查找: "... So in the figure \ref{fig:3-12} we see ... similar to figure \ref{fig:3-1}..."
替换: figure 3-
返回了:
figure \ref{fig:3-
现在是结束括号
"... So in the figure \ref{fig:3-12 we see ... similar to figure \ref{fig:3-1..."
产生
sed 's#/ref{fig:3-\d+#\ref{fig:3-\d+}#g' main.tex
朋友有什么不对?谢谢。
答案 0 :(得分:1)
您可以使用此sed
:
s="... So in the figure 3-12 we see ... similar to figure 3-1..."
sed -E 's/[0-9]+-[0-9]+/\\ref{fig:&}/g' <<< "$s"
... So in the figure \ref{fig:3-12} we see ... similar to figure \ref{fig:3-1}...
所以我们匹配模式[0-9]+-[0-9]+
以匹配number-number
模式。替换&
是正则表达式完全匹配的字符串的后引用。
答案 1 :(得分:1)
您可以在单词figure
之后捕获任何数字和连字符条纹:
s="... So in the figure 3-12 we see ... similar to figure 3-1..."
echo $s | sed -E 's#(figure +)([0-9-]+)#\1\\ref{fig:\2}#g'
请参阅online demo。
如何使用* .bak副本进行原位替换的示例(在Ubuntu中测试):
sed -i.bak -E 's#(figure +)([0-9-]+)#\1\\ref{fig:\2}#g' main.tex
<强>详情
(figure +)
- 第1组:捕获figure
子字符串和1个或多个空格(替换为[[:blank:]]+
以匹配任何空格或制表符)([0-9-]+)
- 第2组:一个或多个数字或-
。替换是:
\1
- 对第1组值的替换反向引用\\ref{fig:
- 文字\ref{fig:
子字符串(必须转义反斜杠,因为它是“特殊”字符)\2
- 对第2组值的替换反向引用}
- }
字符。