我想将#Banner none
替换为Banner /etc/sshd_banner
内的/etc/sshd_config
。如果我跑
sudo sed -i "s/#Banner none/Banner \/etc\/sshd_banner" /etc/sshd_config
我收到以下错误
sed:1:“/ etc / sshd_config”:未终止的替代模式
有关如何解决此问题的任何想法?
答案 0 :(得分:22)
您的命令有三个问题:
/
。/
作为分隔符,因为此字符出现在您尝试替换/替换的字符串中。您应该使用其他字符(例如竖线字符)作为分隔符。sed
版本(BSD)中,-i
标志需要必需 <extension>
参数,您的命令是失踪。如果您要使用此版本的""
就地编辑文件,则空字符串(-i
)应该跟在sed
标记后面。总之,试试
sudo sed -i "" "s|#Banner none|Banner /etc/sshd_banner|" /etc/sshd_config
答案 1 :(得分:21)
试试这个:
sudo sed -i "" "s|#Banner none|Banner /etc/sshd_banner|" /etc/sshd_config
通过更改分隔符,您无需转义/
您的原始帖子最后错过了一个/
。
从OS X手册
-i extension
Edit files in-place, saving backups with the specified extension. If a zero-length extension
is given, no backup will be saved. It is not recommended to give a zero-length extension when
in-place editing files, as you risk corruption or partial content in situations where disk
space is exhausted, etc.
zero-length
= ""
答案 2 :(得分:0)
尝试使用单引号。此外,如果您想使用/
以外的其他内容,某些Seds要求您转义第一个分隔符。
sudo sed -i 's\:#Banner none:Banner :etc/sshd_banner:' /etc/sshd_config
还有一点是#
可能被解释为一直持续到行尾的注释。