最有效的搜索和替换多种模式的方法

时间:2017-05-19 10:31:40

标签: bash sed

我正在编写一个应该在/ etc / ssh / sshd_config中禁用PasswordAuthentication的脚本。 所以我试着用sed做这件事。在我们的环境中,它可以是多种模式。 所以我的脚本中有3个sed命令,但我想知道是否有更有效的方法来替换它。

我实际上正在寻找替换#PasswordAuthentication yesPasswordAuthentication yesPasswordAuthentication no。 有没有更好的方法呢? 这是最干净的方法,还是我应该正式添加if语句?先感谢您。

1 个答案:

答案 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

替换这些行中的任何一行