sed 종료 문제

sed 종료 문제

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/^[...]명령은 완료되지 않은 상태로 남게 됩니다.

관련 정보