sed가“알 수없는`s '옵션”오류와 함께 실패


158

사용하려고합니다

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\"


8
* BSD 오류 메시지 (OSX 포함)는 "대체 명령의 잘못된 플래그 :"입니다.
tripleee

답변:


355

문제는 슬래시입니다. 변수에 변수가 포함되어 있으며 최종 명령은 sed "s/string/path/to/something/g"슬래시가 너무 많이 포함되어 있습니다.

sed문자를 구분 기호로 사용할 수 있으므로 (새 구분 기호를 선언하지 않아도 됨) 대체 문자열에 나타나지 않는 다른 문자를 사용해보십시오.

replacement="/my/path"
sed --expression "s@pattern@$replacement@"

이것은 대체 증거가 아닙니다. 나중에 대체 문자열에 포함 된 @경우 동일한 이유로 중단되고 같은 백 슬래시 시퀀스 \1는 여전히 sed규칙 에 따라 해석됩니다 . |가독성과 비슷하기 때문에 구분자로 사용 하는 것도 좋은 옵션 /입니다.


38
이 답변이 도움이 되었기 때문에 향후 사용자를 돕기위한 참고 사항입니다. 원래 포스터는 대체로 슬래시가 포함 된 대체 변수에 포함되었을 가능성이 높습니다. 이러한 슬래시 중 첫 번째가 발생한 후 sed는 교체가 종료 된 것으로 간주하고 옵션으로 다음에 오는 모든 항목 (예 :)을 고려했습니다 g.
Brian Warshaw

4
멋지게 수행 (단지와 변수 표현을 포장 기억 "하지 '당신이 많이 얻을 것이다, 그렇지 않으면 $content의 내용 대신 최종 결과에 $content:))

1
@AbstractDissonance 어쩌면 암호 나 이상한 또는 임의의 것을 바꾸는 경우에도 @가있을 수 있습니다. 대체 문자열에 포함되지 않은 분리 문자를 찾아야합니다.
Xavi Montero

5
@ppumkin은 ie : sed -i "s/../../g"와 같은 "슬래시"구분 기호 를 다른 문자 ie :로 바꾸면 sed -i "s@...@...@g"여러 슬래시 문제가 사라집니다. 그리고 "대신에 사용하면 '내부의 변수와 잘 작동합니다 export var1=bar; sed -i "s@foo@${var1}@g". 멋진 sed 문서에서 더 많은 정보를 찾을 수 있습니다 : grymoire.com/Unix/Sed.html
Egel

1
참조 info sed(: 소스 unix.stackexchange.com/questions/259083/... ) : 명령이다 "는 S의 구문 (대체와 같이)를의 / 정규 표현식 / 교체 / 플래그 '는 / 문자가 균일하게 다른로 대체 될 수있다. "s 명령 내에서 단일 문자."
Gabriel Staples
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.