sed 失败,出现“'s' 的未知选项”错误 [关闭]
Posted
技术标签:
【中文标题】sed 失败,出现“\'s\' 的未知选项”错误 [关闭]【英文标题】:sed fails with "unknown option to `s'" error [closed]sed 失败,出现“'s' 的未知选项”错误 [关闭] 【发布时间】:2012-03-11 03:06:09 【问题描述】:我正在尝试使用
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\"
【问题讨论】:
*BSD 错误消息(包括 OSX)是“替代命令中的错误标志:”——将其包含在此处以使其更易于搜索。 重复***.com/questions/27787536/… 【参考方案1】:问题在于斜杠:您的变量包含它们,最终命令将类似于sed "s/string/path/to/something/g"
,其中包含太多斜杠。
由于sed
可以使用任何字符作为分隔符(无需声明新的分隔符),您可以尝试使用另一个没有出现在替换字符串中的字符:
replacement="/my/path"
sed --expression "s@pattern@$replacement@"
请注意,这不是防弹的:如果替换字符串稍后包含@
,它将由于相同的原因而中断,并且任何像\1
这样的反斜杠序列仍将根据sed
规则进行解释。使用|
作为分隔符也是一个不错的选择,因为它与/
的可读性相似。
【讨论】:
只是一个帮助未来用户的注释,因为我发现这个答案也很有帮助。最初的海报很可能在他的替代品中有一些东西(很可能隐藏在变量中),其中包含正斜杠。在遇到第一个斜杠后,sed 认为替换已终止,并且可以选择接下来出现的任何内容(例如g
)。
干得好(记得用"
而不是'
包装变量表达式,否则你会在最终结果中得到很多$content
而不是$content
的内容:) )
@AbstractDissonance 也许如果您要替换密码或一些奇怪或随机的东西,您仍然有@。您必须找到一个不包含在您的替换字符串中的分隔符。
@ppumkin 只需将“正斜杠”分隔符如:sed -i "s/../../g"
替换为不同的字符,即:sed -i "s@...@...@g"
,那么多个斜杠的问题应该会消失。如果您使用"
而不是'
,它也应该适用于内部变量,即:export var1=bar; sed -i "s@foo@$var1@g"
。更多信息你可以在很棒的 sed 文档中找到:grymoire.com/Unix/Sed.html
参见info sed
(来源:unix.stackexchange.com/questions/259083/…):“s(作为替代)命令的语法是's/regexp/replacement/flags'。/ 字符可以被任何给定的 s 命令中的任何其他单个字符统一替换。”以上是关于sed 失败,出现“'s' 的未知选项”错误 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章