我有一个很大的 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})
但我想避免编写一个脚本来检测所有引用并按顺序修改它们,即使我猜它不会让人不知所措。
另请注意,我有很多东西,例如 Table~\ref{XX} 和 Figure~\ref{XX} 我想保持不变。
有什么想法吗?
最佳答案
替换模式中的&
符号代表整个匹配。您似乎想避免在除 Equation~
之外的任何单词之后修改值,因此它应该包含在模式中,这意味着您不能使用 &
,但可以使用常规 \1
和 \2
来引用正则表达式的捕获部分。
您可以将 Equation~
和模式的其余部分捕获到两个单独的组中,并在替换中引用它们:
sed 's#\(Equation~\)\(\\ref{[^{}]*}\)#\1(\2)#g'
或者,使用 POSIX ERE,
sed -E 's#(Equation~)(\\ref\{[^{}]*})#\1(\2)#g'
Demo :
s='Equation~\ref{XX} Table~\ref{XX} and Figure~\ref{XX}'
echo "$s" | sed 's#\(Equation~\)\(\\ref{[^{}]*}\)#\1(\2)#g'
# => Equation~(\ref{XX}) Table~\ref{XX} and Figure~\ref{XX}
关于bash - 使用 sed 在所有方程编号周围添加括号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50814529/