使用 sed 进行配置修改



对不起,这是一个快速的。我正在尝试使用简单的 sed 命令(作为执行许多功能的较大脚本的一部分(修改 ssh 配置文件的值。我似乎无法弄清楚为什么它不起作用。这是我尝试更改的配置行:

PermitRootLogin without-password

这是我的代码:

    sed 's/^(PermitRootLogins*.s*).*$/1Yes/' sshd_config

因此,目标是将"无密码"替换为"是"。它似乎有效,除了我收到这个:

PermitRootLogin wYes

试试这个:

sed 's/^(PermitRootLogin ).*/1Yes/' sshd_config

使用-i选项就编辑文件:

sed -i 's/^(PermitRootLogin ).*/1Yes/' sshd_config

您的模式捕获w因为它是正则表达式s*.中零个或多个空格(s*(之后的第一个字符(.

(

让我们分解正则表达式:

^(PermitRootLogins*.s*).*$
  • ^与行首匹配
  • (开始捕获 grou
  • PermitRootLogin与该指令匹配
  • s*匹配指令后最长的空格序列
  • .匹配空格后的第一个字符,即without-password开头的w
  • s*匹配 w 之后最长的空格序列。由于那里没有空格,因此它与空字符串匹配。
  • )结束捕获组

以上所有内容都放入捕获组1

  • .*与之后的所有内容相匹配。
  • $与行尾匹配。

因此,捕获组1包含PermitRootLogin w。然后,将其复制到替换项中,并向其添加Yes。结果是

PermitRootLogin wYes

我只会使用

sed 's/^PermitRootLogins.*$/PermitRootLogin Yes/' sshd_config

当您不需要将任何变量匹配复制到替换项时,不需要捕获组。

最新更新