我想使用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
,2
和3
是占位符,反向引用相应的组值。
在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