如果标签已经存在,则将行附加到配置标签

Appending line to config tag if the tag already exists

我正在尝试编写一个脚本来确保 /etc/mysql/my.cnf:

中存在以下标记和配置
[mysqld]
bind-address = 0.0.0.0

我目前有以下命令:

sudo sed -i "/bind-address/d" /etc/mysql/my.cnf
sudo sed -i "/\[mysqld\]/d" /etc/mysql/my.cnf
sudo sed -i "$a[mysqld]\nbind-address = 0.0.0.0" /etc/mysql/my.cnf

我要删除任何包含 'bind-address' 或“[mysqld]”的行,然后附加 mysqld 标记以及我要绑定的地址。但是,如果 mysqld 下还有其他配置,那将无法正常工作。它最终会从:

[mysqld]
some_config
some_config
bind-address = 127.0.0.1

至:

some_config
some_config
[mysqld]
bind-address = 0.0.0.0

有没有更简洁的方法来做到这一点?谢谢。

编辑:我决定只替换 /etc/mysql/mysql.conf.d/mysqld.cnf 下的默认 'bind-address = 127.0.0.1',这将起到相同的作用。

使用 sed,您可以定义一个地址范围来更改 \[mysqld\] 和下一个 ^ *\[(或文件末尾)之间的绑定地址值:

sed -i '/\[mysqld\]/,/^ *\[/{s/\(bind-address *= *\).*/.0.0.0/}' file