使用 SED 取消注释配置文件行,并替换 Linux 配置文件中的文本

使用 SED 取消注释配置文件行,并替换 Linux 配置文件中的文本

我正在尝试自动配置/etc/ssh/sshd_config文件中的某些参数,最值得注意的是

#PermitRootLogin yes

#LoginGraceTime 2m

他们应该阅读:

PermitRootLogin no
LoginGraceTime 60

我不是脚本高手,所以请耐心等待......

我尝试sed -e 's/#LoginGraceTime 2m/LoginGraceTime 60/' /etc/ssh/sshd_config开始滚动,但得到了一个奇怪的结果。它只是简单地显示了我正在尝试处理的文件......

有人可以直接让我使用 sed 吗?

答案1

将输出重定向到临时文件,然后将临时文件重命名为原始文件

sed -e 's/#LoginGraceTime 2m/LoginGraceTime 60/' /etc/ssh/sshd_config > /etc/ssh/sshd_config.tmp && mv -f /etc/ssh/sshd_config.tmp /etc/ssh/sshd_config

或者,如果您有 GNU,sed您可以使用-i就地编辑选项

sed -i -e 's/#LoginGraceTime 2m/LoginGraceTime 60/' /etc/ssh/sshd_config

答案2

与@Bodo的答案类似,但此解决方案保持原始行不变,并将修改后的版本添加到原始行下方。仅当您想保留原始行作为注释时,这才有意义。

 sed -i'' -n 'p;s/#\(LoginGraceTime\) 2m/\1 60/p;s/#\(PermitRootLogin\) yes/\1 no/p' /etc/ssh/sshd_config

这里我们使用一个捕获组\(...\),它在替换中被替换\1(因为我们懒得再次输入相同的字符串)。

带选项的 sed-n仅输出显式打印的行,因此第一个p命令用于打印未修改的行,接下来的两个命令用于打印修改的行。

相关内容