(
对不起,这是一个快速的。我正在尝试使用简单的 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
当您不需要将任何变量匹配复制到替换项时,不需要捕获组。