我正在编写一个应该在/ etc / ssh / sshd_config中禁用PasswordAuthentication的脚本。 所以我试着用sed做这件事。在我们的环境中,它可以是多种模式。 所以我的脚本中有3个sed命令,但我想知道是否有更有效的方法来替换它。
我实际上正在寻找替换#PasswordAuthentication yes
,PasswordAuthentication yes
或PasswordAuthentication no
。
有没有更好的方法呢?
这是最干净的方法,还是我应该正式添加if语句?先感谢您。
答案 0 :(得分:0)
只使用一个正则表达式模式:
sed 's/^\s*#\?PasswordAuthentication\s*\(yes\|no\)\s*$/YOUR_REPLACEMENT/'
regexp可以理解如下:
^ - matches the start of line
\s* - matches any (0 or more) amount of whitespace characters
#\? - matches 0 or 1 `#` characters
PasswordAuthentication - matches a literal text string, as is
\s* - (see above)
(yes\|no\) - matches either `yes` or `no`
\s* - (see above)
$ - matches the end of line
匹配空白字符(空格和制表符)。嵌入在模式/保持空间中的换行符也将匹配:
这将匹配:
#PasswordAuthentication yes
PasswordAuthentication yes
PasswordAuthentication no
并用YOUR_REPLACEMENT
替换这些行中的任何一行