在输出中查找并替换正则表达式

时间:2017-10-13 08:03:42

标签: regex sed latex

我得到了一个巨大的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

朋友有什么不对?谢谢。

2 个答案:

答案 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组值的替换反向引用
  • } - }字符。