파일에 쉼표로 구분된 변수 추가

파일에 쉼표로 구분된 변수 추가

다음 문자열을 삽입하려는 파일이 있습니다.

export TRUSTED_PROXIES='"172.16.0.0/12, 172.17.0.0/12"'

[root@sasasas]# echo $TRUSTED_PROXIES
"172.16.0.0/12, 172.17.0.0/12"

하지만 다음 오류가 발생합니다.

[root@sasasas]# sed -i  '2i trusted_proxies ='$TRUSTED_PROXIES''  log.conf
sed: can't read 172.17.0.0/12": No such file or directory

그러나 실제 값으로 아래 명령을 실행하면 작동합니다.

sed -i  '2 i trusted_proxies =172.16.0.0/12, 172.17.0.0/12'  log.conf

쉼표로 구분된 환경 변수 값을 이스케이프 처리하고 파일에 삽입하는 방법은 무엇입니까? 저는 리눅스를 사용하고 있습니다.

내가 시도한 명령은 다음과 같습니다

sed -i  '2i trusted_proxies ='$TRUSTED_PROXIES''  log.conf
sed -i  '2i trusted_proxies ="$TRUSTED_PROXIES"'  log.conf
sed -i  "2i trusted_proxies ='$TRUSTED_PROXIES'"  log.conf
sed -i  "2i trusted_proxies ="$TRUSTED_PROXIES""  log.conf

답변1

변수에 공백이 포함되어 있고 따옴표 없이 전달하기 때문에 쉘은 변수를 확장하려고 시도하며 sed실제로 보는 것은 두 번째 값인 파일입니다. 실행하면 이해하기가 더 쉬울 수 있으므로 set -x셸에서 실행되는 확장 명령을 볼 수 있습니다.

$ set -x
$ sed -i  '2i trusted_proxies ='$TRUSTED_PROXIES''  file
+ sed -i '2i trusted_proxies ="172.16.0.0/12,' '172.17.0.0/12"' file
sed: can't read 172.17.0.0/12": No such file or directory

위에서 볼 수 있듯이 실제 명령 실행은 다음과 같습니다.

sed -i '2i trusted_proxies ="172.16.0.0/12,' '172.17.0.0/12"'

sed이라는 파일을 찾는 경우에도 마찬가지입니다 '172.17.0.0/12"'. 해결책은 변수를 큰따옴표로 묶는 것입니다.

sed -i  '2i trusted_proxies ='"$TRUSTED_PROXIES"''  file

또는 더 간단하게 sed전체 명령을 큰따옴표로 묶고 인쇄된 값을 작은따옴표로 묶습니다.

sed -i  "2i trusted_proxies ='$TRUSTED_PROXIES'"  file

답변2

Inputfile

praveen@praveen:~$  cat k3
10
20


TRUSTED_PROXIES='"172.16.0.0/12, 172.17.0.0/12"'

awk -v TRUSTED_PROXIES="$TRUSTED_PROXIES" 'NR==2{$0="trusted_proxies="TRUSTED_PROXIES"\n"$0}1' k3 >k3_temp && mv k3_temp k3


output

10
trusted_proxies="172.16.0.0/12, 172.17.0.0/12"
20

관련 정보