如果标记已存在,则将行添加到配置标记

时间:2017-11-20 02:28:24

标签: mysql sed my.cnf

我正在尝试编写一个脚本,以确保/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

有更清洁的方法吗?谢谢。

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

1 个答案:

答案 0 :(得分:1)

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

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