sed的 - 未知选项'S'

问题描述:

我试图使用sed的 - 未知选项'S'

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

+6

* BSD错误信息(包括OSX)是“替换命令中的坏标志:” - 将其包括在内以使其更具可读性。 – tripleee 2015-10-20 08:35:56

问题出在斜杠上:你的变量包含它们,最后的命令将会像sed "s/string/path/to/something/g"那样,包含太多的斜线。

由于sed可以采取任何字符作为分隔符,你可以尝试使用另外一个,不会出现在您的替换字符串:

replacement="/my/path" 
sed -e "[email protected]@[email protected]" 

请注意,这不是防弹:如果替换字符串包含后@它会因为同样的原因而中断,并且像\1之类的任何反斜杠序列仍将根据sed规则进行解释。

+26

只是一个说明,以帮助未来的用户,因为我发现这个答案也是有帮助的。原来的海报最有可能在他的替代品中(最可能隐藏在变量中)包含正斜杠。在遇到第一个斜线之后,sed认为替换已经终止,接下来是选项(例如'g')。 – 2014-02-21 14:05:05

+0

啊,是的,看了10次后,我看到了斜线。那么我该如何解决这个问题呢? – ppumkin 2014-10-31 22:00:15

+3

很好完成(只记得用'''包装变量表达式''不'''否则你会在你的最终结果中得到很多'$ content'而不是'$ content'的内容:) :) – 2016-01-08 13:41:30