2017-10-13 49 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 +'。使圖形成爲你圖案的一部分。 –