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는 백슬래시를 피하려면 두 개의 검은색 슬래시가 필요했습니다.
  • {\\\revision}대신에 역참조해야 합니다 .{\w*}
  • REV마침내 예상 출력에 따라 컬 버팀대가 필요했습니다.

관련 정보