sed 스크립트에는 다음을 통해 업데이트해야 하는 다음 줄이 있습니다 sed
.
opennic="nameserver 95.85.9.86\nnameserver 185.83.217.248\nnameserver 193.183.98.154\nnameserver 5.9.49.12"
명령 sed
은 다음과 같습니다.
sed -i.bak s/^opennic=\".*\"/opennic=\"${u}\"/g /absolute/path/to/script.sh
그리고 $u
는:
nameserver 104.238.153.178\\nnameserver 141.138.157.53\\nnameserver 45.63.91.109\\n
내가 받은 오류 메시지는 다음과 같습니다.
sed: -e expression #1, char 35: unterminated `s' command
의 이스케이프 문자에 문제가 있는 것 같은데 $u
정확히 알 수는 없습니다.
회사에 어떻게 가나요 sed
?
답변1
sed
명령에 큰따옴표를 사용해야 합니다 .
$ sed -i.bak "s/^opennic=\".*\"/opennic=\"${u}\"/g" /absolute/path/to/script.sh
따옴표가 없으면 sed는 여러 인수로 실행됩니다. $u
변수를 공백으로 여러 매개변수로 분할합니다.
다음과 같습니다(각 줄은 다른 매개변수입니다).
$ sed \
's/^opennic=".*"/opennic="nameserver' \
'104.238.153.178\\nnameserver' \
[...]`
여기서 첫 번째 s/^[...]
명령은 완료되지 않은 상태로 남게 됩니다.