sed は中括弧を飲み込みます

sed は中括弧を飲み込みます

私は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 では、バックスラッシュをエスケープするために 2 つの黒いスラッシュが必要でした。
  • 代わりに {\\\revision}{\w*}
  • REV最終的に、予想出力に応じてカールブレースが必要になりました

関連情報