사용하려고합니다
sed -i -e "s/.*seb.*/ \"$ftp_login_template\"/" $ftp_dir
그러나이 오류가 발생합니다 :
sed: -e expression #1, char 34: unknown option to `s'
이것이 왜 완벽하게 작동하는지 이해하지 못합니다.
sed -i -e "s/.*wbspassword.*/ \"wbspassword\": \"$password\",/" $user_conf
내가 뭘 잘못하고 있는지에 대한 아이디어가 있습니까?
이것이 문제가 될 수 있습니까?
ftp_login_template=\${user}:${password}:24:86::\/var\/lib\/clit.${user}\/downloads:\/bin\/false\"
답변
문제는 슬래시입니다. 변수에 변수가 포함되어 있으며 최종 명령은 sed "s/string/path/to/something/g"
슬래시가 너무 많이 포함되어 있습니다.
sed
문자를 구분 기호로 사용할 수 있으므로 (새 구분 기호를 선언하지 않아도 됨) 대체 문자열에 나타나지 않는 다른 문자를 사용해보십시오.
replacement="/my/path"
sed --expression "s@pattern@$replacement@"
이것은 대체 증거가 아닙니다. 나중에 대체 문자열에 포함 된 @
경우 동일한 이유로 중단되고 같은 백 슬래시 시퀀스 \1
는 여전히 sed
규칙 에 따라 해석됩니다 . |
가독성과 비슷하기 때문에 구분자로 사용 하는 것도 좋은 옵션 /
입니다.