用于 postgresql pg_hba.conf 修改的 sed 命令

sed command for postgresql pg_hba.conf modification

我想使用 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/localallalltrust/' test.conf

或者,因为您似乎拥有 GNU sed:

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

当然你可以在评论中做 并将其减少到

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

注:

  • -E 启用 POSIX ERE 语法(无需转义 +(...)
  • ([[:space:]]+) / (\s+)定义ID以1开头匹配一个或多个空格的捕获组
  • </code>、<code></code> 是占位符,是对适当组值的反向引用。</li> </ul> <p>在<code>s/(local\s+all\s+all\s+)peer/trust/中,你捕获了peer之前的整个部分并匹配peer,然后整个匹配被替换为peer之前的部分(用</code>) + <code>trust.

如果需要更改的字符串并不总是 peer

,您可以使用此 sed
$ sed -i 's/\S*$/trust/' input_file
# local is for Unix domain socket connections trust
local   all             all                                     trust