我正在运行以下sed
命令来编辑具有特定参数的my.cnf
。然而,它需要检查和修改最后两个值,尽管它们的语法与之前修改的值没有区别,但仍然无法完成。sed无法匹配,删除然后插入
sed -i s/".*old_passwords=[0-9]*"/"# old_passwords=1"/g /home/david/systems/zabbix/2.2/2.2.5/confs/my.cnf
sed -i '/innodb_buffer_pool_size=/d' /home/david/systems/zabbix/2.2/2.2.5/confs/my.cnf
sed -i '/\old_passwords=/ainnodb_buffer_pool_size=5G' /home/david/systems/zabbix/2.2/2.2.5/confs/my.cnf
sed -i '/innodb_additional_mem_pool_size=/d' /home/david/systems/zabbix/2.2/2.2.5/confs/my.cnf
sed -i '/\innodb_buffer_pool_size=/ainnodb_additional_mem_pool_size=100M' /home/david/systems/zabbix/2.2/2.2.5/confs/my.cnf
sed -i '/innodb_file_per_table/d' /home/david/systems/zabbix/2.2/2.2.5/confs/my.cnf
sed -i '/\innodb_additional_mem_pool_size=/ainnodb_file_per_table' /home/david/systems/zabbix/2.2/2.2.5/confs/my.cnf
sed -i '/innodb_log_file_size=/d' /home/david/systems/zabbix/2.2/2.2.5/confs/my.cnf
sed -i '/\innodb_file_per_table/ainnodb_log_file_size=125M' /home/david/systems/zabbix/2.2/2.2.5/confs/my.cnf
sed -i '/innodb_flush_log_at_trx_commit=/d' /home/david/systems/zabbix/2.2/2.2.5/confs/my.cnf
sed -i '/\innodb_log_file_size=/ainnodb_flush_log_at_trx_commit=1' /home/david/systems/zabbix/2.2/2.2.5/confs/my.cnf
sed -i '/max_connections=/d' /home/david/systems/zabbix/2.2/2.2.5/confs/my.cnf
sed -i '/\innodb_flush_log_at_trx_commit=/amax_connections=500' /home/david/systems/zabbix/2.2/2.2.5/confs/my.cnf
sed -i '/query_cache_size=/d' /home/david/systems/zabbix/2.2/2.2.5/confs/my.cnf
sed -i '/\max_connections=/aquery_cache_size=256M' /home/david/systems/zabbix/2.2/2.2.5/confs/my.cnf
sed -i '/query_cache_type=/d' /home/david/systems/zabbix/2.2/2.2.5/confs/my.cnf
sed -i '/\query_cache_size=/aquery_cache_type=0' /home/david/systems/zabbix/2.2/2.2.5/confs/my.cnf
sed -i '/query_cache_limit=/d' /home/david/systems/zabbix/2.2/2.2.5/confs/my.cnf
sed -i '/\query_cache_type=/aquery_cache_limit=1M' /home/david/systems/zabbix/2.2/2.2.5/confs/my.cnf
sed -i '/table_cache=/d' /home/david/systems/zabbix/2.2/2.2.5/confs/my.cnf
sed -i '/\query_cache_limit=/atable_cache=256' /home/david/systems/zabbix/2.2/2.2.5/confs/my.cnf
sed -i '/thread_cache_size=/d' /home/david/systems/zabbix/2.2/2.2.5/confs/my.cnf
sed -i '/\table_cache=/athread_cache_size=4' /home/david/systems/zabbix/2.2/2.2.5/confs/my.cnf
sed -i '/innodb_flush_method=/d' /home/david/systems/zabbix/2.2/2.2.5/confs/my.cnf
sed -i '/\thread_cache_size=/ainnodb_flush_method=O_DIRECT' /home/david/systems/zabbix/2.2/2.2.5/confs/my.cnf
最后两个值,我需要检查并设定为:
thread_cache_size=4
innodb_flush_method=O_DIRECT
我跑这对一个漂亮的标准my.cnf文件:
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Default to using old password format for compatibility with mysql 3.x
# clients (those using the mysqlclient10 compatibility package).
old_passwords=1
max_connections=500
innodb_buffer_pool_size=256M
# Disabling symbolic-links is recommended to prevent assorted security risks;
# to do so, uncomment this line:
# symbolic-links=0
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
产生的文件看起来像这样:
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Default to using old password format for compatibility with mysql 3.x
# clients (those using the mysqlclient10 compatibility package).
# old_passwords=1
innodb_buffer_pool_size=5G
innodb_additional_mem_pool_size=100M
innodb_file_per_table
innodb_log_file_size=125M
innodb_flush_log_at_trx_commit=1
max_connections=500
query_cache_size=256M
query_cache_type=0
query_cache_limit=1M
table_cache=256
# Disabling symbolic-links is recommended to prevent assorted security risks;
# to do so, uncomment this line:
# symbolic-links=0
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
我已经尝试删除thread_cache_size =命令,并用随机的替换,这些工作进一步发挥作用,但仍然失败,就好像它将编辑my.cnf文件的程度有限一样。
所以你完全替代的'[下半年mysqld]'块?这在awk中会容易得多。你对备用解决方案感兴趣吗? (对于sed能够“读入”文件的程度,没有实际的限制。)祝你好运。 – shellter 2014-08-27 13:02:15
感谢awk的提议,试图首先让我的脑袋围绕sed,而不是在遇到问题时使用别的东西。 – 2014-08-27 13:18:46