我有一个 LaTeX 文件,其中包含
\newcommand{\revision}{value}
在 CI 期间我想做以下事情:
REV=${CI_COMMIT_TAG:-$CI_COMMIT_SHORT_SHA}
sed -i 's/{\\revision}{\(\w*\)}/\1'"$REV"'/' variables.tex
期待类似的事情\newcommand{\revision}{577f813d}
不幸的是,这种情况发生了:
> REV=test sed 's/{\\revision}{\(\w*\)}/\1'"$REV"'/' variables.tex
\newcommandvaluetest
为什么会出现这种情况?
答案1
尝试这个,
sed -e "s/\({\\\revision}\){\w*}/\1{$REV}/" variables.tex
\newcommand{\revision}{577f813d}
- sed 需要两个黑色斜杠来转义反斜杠。
- 我们应该反向引用 the
{\\\revision}
而不是{\w*}
REV
最后根据我们的预期输出需要一个大括号