使用sed在所有方程编号周围添加括号

时间:2018-06-12 10:07:32

标签: bash sed replace

我有一个包含大量方程式的大型LaTeX文件。 它们都引用如下:

Equation~\ref{XX}
Equation~\ref{XY}
...

我想获得这个,

Equation~(\ref{XX})
Equation~(\ref{XY})
...

我只掌握了sed的基本知识,但我确信它可以使用'&'符号

我试过了:

sed 's#\ref{*}#(&)#g' input_tex_file.tex

这不会改变任何事情。

如果我这样做:

sed 's#\ref{XX}#(&)#g' input_tex_file.tex

我显然获得了

Equation~(\ref{XX})

但是我想避免编写一个脚本来检测所有引用并按顺序修改它们,即使我猜它不会压倒性的。

另请注意,我有大量的事情,比如表〜\ ref {XX} 图〜\ ref {XX} ,我希望不加修改。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

替换模式中的&符号代表整个匹配。您似乎想避免在Equation~之后的任何单词后修改值,因此它应该包含在模式中,这意味着您不能使用&,而是常规\1和{{1引用正则表达式的捕获部分。

您可以将\2和其余模式捕获到两个单独的组中,并在替换中引用它们:

Equation~

或者,使用POSIX ERE,

sed 's#\(Equation~\)\(\\ref{[^{}]*}\)#\1(\2)#g'

Demo

sed -E 's#(Equation~)(\\ref\{[^{}]*})#\1(\2)#g'