У меня есть файл LaTeX, содержащий
\newcommand{\revision}{value}
А во время КИ я хочу сделать следующее:
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 требовал двух черных слешей для экранирования обратного слеша.
- Мы должны сделать обратную ссылку
{\\\revision}
вместо{\w*}
- наконец, потребовалась фигурная скобка вокруг,
REV
как мы и ожидали.