gpt4 book ai didi

bash - 如何用sed添加回车?

转载 作者:行者123 更新时间:2023-12-04 18:31:45 27 4
gpt4 key购买 nike

我正在尝试使用 sed 替换 [databases]在 pgbouncer.ini 中

[databases]
db = host=localhost port=5432 dbname=db user=r00t password=xyz

这是我的 bash 脚本:
CR=$(printf '\r')
sed "s/\[databases\]\$/\[databases\]$CR db = host=localhost port=5432 dbname=db user=r00t password=xyz/" pg.ini

不幸的是,我只得到了这个:
db = host=localhost port=5432 dbname=db user=r00t password=xyz

更新:

变量会导致接受的答案出现问题。我得到错误:

sed: -e expression #1, char 127: extra characters after command


sed -i "/\[databases\]/a\
main_db = host=${MAIN_DB_LOC} port=5432 dbname=${MAIN_DB} user=r00t password=${MAIN_DB_PASSWORD}
audit_db = host=${AUDIT_DB_LOC} port=5432 dbname=${AUDIT_DB} user=r00t password=${AUDIT_DB_PASSWORD}
lat_lng_db = host=${LAT_LNG_DB_LOC} port=5432 dbname=${LAT_LNG_DB} user=r00t password=${AUDIT_DB_PASSWORD}
" /etc/pgbouncer/pgbouncer.ini

最佳答案

而不是 CR , 使用换行符,可用 \nsed (Unix 上的 LF):

$ sed 's/\[databases\]$/&\ndb = host=localhost port=5432 dbname=db user=r00t password=xyz/' pg.ini

此外,行尾 anchor $不需要转义(如果在单引号下使用),可以使用 &在替换字符串中重新使用匹配的字符串 ( [databases] )。

使用 port多变的:
$ port=5432
$ sed 's/\[databases\]$/&\ndb = host=localhost port='"$port"' dbname=db user=r00t password=xyz/' pg.ini

(注意我们需要使用双引号来扩展 $port ,这就是我们连接单引号和双引号 sed 子字符串的原因,例如 'x'"y"'z' 。)

关于bash - 如何用sed添加回车?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46695403/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com