sed 변수 확장 문제

sed 변수 확장 문제

그래서 작성 중인 bash 스크립트에서 약간의 진전을 이루었지만 변수를 확장하기 위해 다음을 작성하는 방법을 알아낼 수 없는 것 같습니다. 나는 일반적인 ${variable} 및 \$(variable) 및 기타 임의의 시도를 시도했지만 아무 소용이 없었습니다.

eval을 사용하여 ""로 감싸려고 시도했지만 여전히 작동하지 않습니다(명령줄에서 실행하지 않는 한 bash 스크립트에서는 작동하지 않습니다).

sed -i 's/.*output_snat_lo.conf:/    - '\''\\-t nat -A POSTROUTING -s 10.0.0.1/32 -d $DNAT -j SNAT --to-source $SINT'\''\n&/' file.yaml

어떤 제안이 있으십니까? 티아.

답변1

$DNAT작은 따옴표 내부를 '"$DNAT"'종료 작은 따옴표로 변경하고 큰 따옴표를 시작하고(단어 분리를 막기 위해 거의 항상 큰 따옴표 안에 변수 확장을 원하기 때문에) 변수를 넣고 큰 따옴표를 종료하고 작은 따옴표를 다시 시작하십시오.

sed -i 's|.*output_snat_lo.conf:|    - '\''\\-t nat -A POSTROUTING -s 10.0.0.1/32 -d '"$DNAT"' -j SNAT --to-source '"$SINT"\''\n&|' file.yaml

답변2

문자열 확장에 경로 구분 기호(예: /)가 포함된 경우 패턴에 없는 다른 문자를 사용해야 합니다.

또한 $variables를 사용할 때는 큰따옴표를 사용하십시오. 예를 들면 다음과 같습니다.

sed -i 's/old_string/new_string/' $some_file

~이 되다

sed -i "s|$old_string|$new_string|" $some_file

관련 정보