2017-10-13 32 views
2

我得到了与图坏引用一个巨大的LaTeX的文件,正则表达式替换,例如它说发现并输出

"... 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 

这将产生

"... So in the figure \ref{fig:3-\d+} we see ... similar to figure \ref{fig:3-\d+}..." 

什么是错的朋友?谢谢。

回答

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组:一个或多个d igits或-

替换是:

  • \1 - 替换反向引用到第1个值
  • \\ref{fig: - 字面\ref{fig:子(反斜杠必须转义,因为它是一个 “特殊” 炭)
  • \2 - 对第2组值的替换反向引用
  • } - a } char。
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模式。在替换&是通过正则表达式模式完全匹配的字符串的反向引用。

+0

您正在匹配文本中的每个\ d + - \ d +'。使图形成为你图案的一部分。 –