sed verschluckt geschweifte Klammern

sed verschluckt geschweifte Klammern

Ich habe eine LaTeX-Datei mit

\newcommand{\revision}{value}

Und während der CI möchte ich Folgendes tun:

REV=${CI_COMMIT_TAG:-$CI_COMMIT_SHORT_SHA}
sed -i 's/{\\revision}{\(\w*\)}/\1'"$REV"'/' variables.tex

erwartet etwas in der Art von\newcommand{\revision}{577f813d}

Leider passiert Folgendes:

> REV=test sed 's/{\\revision}{\(\w*\)}/\1'"$REV"'/' variables.tex
\newcommandvaluetest

Warum passiert das?

Antwort1

Versuche dies,

sed -e "s/\({\\\revision}\){\w*}/\1{$REV}/" variables.tex

\newcommand{\revision}{577f813d}
  • sed benötigte zwei schwarze Schrägstriche, um dem Backslash zu entkommen.
  • Wir sollten zurückverweisen auf {\\\revision}statt auf{\w*}
  • schließlich war eine Curl-Klammer erforderlich, REVum unsere erwartete Ausgabe zu erhalten

verwandte Informationen