我有一个包含大量方程式的大型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} ,我希望不加修改。
有什么想法吗?
答案 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'