SED 정규식은 EOF와 일치하고 대체/삽입합니다.

SED 정규식은 EOF와 일치하고 대체/삽입합니다.

다음 명령을 사용하여 앵커(정규식 패턴)를 성공적으로 찾고 이를 파일(파일 경로) 내부의 매개변수 값으로 바꿨습니다.

sed -i $"/$ANCHOR/i \\$PARAMVALSEDINS" "$FILEPATH"

나에게 필요한 것은 내 앵커가 ''(비어 있음)일 때 내 EOF를 일치시키고 거기에서 교체를 수행하는 것입니다.

그래서 나는 다음과 같은 일을 상상합니다.

ANCHOR=''이면 ANCHOR='$EOF'이므로 SED는 성공적으로 EOF를 찾아 교체를 진행합니다.

이것이 가능합니까? 이 외에는 구체적인 내용을 찾을 수 없습니다.

sed -i -e "\$aPARAMVALSEDINS" "$FILEPATH"

그러나 여기에는 ANCHOR 변수가 포함되지 않습니다. 내 질문에 답할 수 없으면 이를 구현하겠습니다.

추신. 물론 완전히 다른 접근 방식을 사용할 수도 있습니다. 정규식 일치 및 정규식 영역 내 EOF 일치에 도움이 되는 다른 명령을 사용하여 이 작업을 수행할 수 있는 방법이 있을까요? 예를 들어 $ANCHOR가 EOF와 일치할 수 있는 또 다른 -i $"/$ANCHOR/i \$PARAMVALSEDINS" "$FILEPATH"

감사해요

답변1

[[ -z $ANCHOR ]] && ANCHOR='$' || ANCHOR="/$ANCHOR/"
sed -i "${ANCHOR}i \\$PARAMVALSEDINS" "$FILEPATH"

답변2

$ ANCHOR=${ANCHOR:+"/$(printf '%s\n' "$ANCHOR" | sed -e 's:[][\/.^$*]:\\&:g')/"}

$ sed -i  -e "${ANCHOR:-\$}i \\$PARAMVALSEDINS" "$FILEPATH"

첫 번째 단계는 앵커 변수의 내용을 이스케이프하여 sed와 함께 강력하게 사용하여 대괄호 안의 표현식과 일치시킬 수 있도록 하는 것입니다.

다음 단계에서 앵커 변수가 비어 있으면 그 자리에 리터럴 $ 기호를 사용합니다. 그러면 sed는 이를 EOF로 해석합니다.

HTH.

참고: paramvalsedins var를 사용하기 전에 이스케이프되었는지 확인하세요.

관련 정보