Regex 使用sed在OSX上设置permitrotlogin

Regex 使用sed在OSX上设置permitrotlogin,regex,macos,bash,sed,Regex,Macos,Bash,Sed,我正在试图找出如何使用OSXsed启用permitrotlogin 我知道OSXsed问题,您必须在开始时给出一个空字符串 我只需要正则表达式我实际上需要做: 如果#permitrotlogin是或#permitrotlogin否,则替换为permitrotlogin yes 我有: sudo sed -i '' 's/#PermitRootLogin no/PermitRootLogin yes/g' /etc/sshd_config 但这不包括如果##permitrotlogin yes操

我正在试图找出如何使用OSX
sed
启用
permitrotlogin

我知道OSX
sed
问题,您必须在开始时给出一个空字符串

我只需要正则表达式我实际上需要做:

如果
#permitrotlogin
是或
#permitrotlogin
否,则替换为
permitrotlogin yes

我有:

sudo sed -i '' 's/#PermitRootLogin no/PermitRootLogin yes/g' /etc/sshd_config

但这不包括如果
##permitrotlogin yes

操作系统X中的
sed
版本要求备份文件后缀在
-i
之后有一个参数

如果不需要备份文件,则必须提供显式空字符串:

sed -i '' 's/^#?PermitRootLogin \(no\|yes\)/PermitRootLogin yes/' /etc/sshd_config
如果没有这个参数,它将使用
s/../../
命令作为后缀,将
/etc/sshd\u config
作为sed编辑命令


请注意,在Snow Leopard和El Capitan之间的某段时间,此SSH配置文件的位置从
/etc/sshd\u config
移动到
/etc/SSH/SSH\u config

双字符串替换指示器
s/s/
?好的,这使sed正常工作,但是正则表达式仍然不能工作…在命令的开头有一个额外的
s/
。另外,
|
需要在
sed
中进行ESA,以形成备选方案。似乎是
/etc/ssh/sshd_config
,至少在10。12@CharlieGorichanaz也在El Capitan。我已经更新了答案来说明这一点。