sed命令postgresql pg_hba.conf修改



我想使用sed:

编辑pg_hba.conf的内容
# "local" is for Unix domain socket connections only
local   all             all                                     peer

# "local" is for Unix domain socket connections only
local   all             all                                     trust

要知道,我使用以下命令:

sed -i 's/local   all             all                                     peer/local   all             all                                     trust/' pg_hba.conf

但是我正在寻找一种绕过所有这些空格的方法

可以使用

sed -E -i 's/local([[:space:]]+)all([[:space:]]+)all([[:space:]]+)peer/local1all2all3trust/' test.conf

或者,既然你似乎有GNUsed:

sed -E -i 's/local(s+)all(s+)all(s+)peer/local1all2all3trust/' test.conf

当然你也可以像poong在评论中做的那样把这个改成

sed -E -i 's/(locals+alls+alls+)peer/1trust/' test.conf

注意:

  • -E启用POSIX ERE语法(不需要转义+(...))
  • ([[:space:]]+)/(s+)定义id以1开头的捕获组,匹配一个或多个空白
  • 1,23是占位符,反向引用相应的组值。

s/(locals+alls+alls+)peer/1trust/中,您捕获peer之前的整个部分并匹配peer,然后将整个匹配替换为peer之前的部分(使用1) +trust

如果需要更改的字符串不总是peer,则可以使用此sed

$ sed -i 's/S*$/trust/' input_file
# local is for Unix domain socket connections trust
local   all             all                                     trust

最新更新