在Mac OS X上使用sed我的字符串替换有什么问题?

时间:2015-02-18 19:19:16

标签: macos sed

我想将#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”:未终止的替代模式

有关如何解决此问题的任何想法?

3 个答案:

答案 0 :(得分:22)

您的命令有三个问题:

  1. 您错过了终止/
  2. 无论如何,您无法使用/作为分隔符,因为此字符出现在您尝试替换/替换的字符串中。您应该使用其他字符(例如竖线字符)作为分隔符。
  3. 在Mac OS X附带的sed版本(BSD)中,-i标志需要必需 <extension>参数,您的命令是失踪。如果您要使用此版本的""就地编辑文件,则空字符串(-i)应该跟在sed标记后面。
  4. 总之,试试

    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

还有一点是#可能被解释为一直持续到行尾的注释。