sed无法匹配、删除然后插入

sed无法匹配、删除然后插入,sed,insert,limit,my.cnf,Sed,Insert,Limit,My.cnf,我正在运行以下sed命令来编辑带有特定参数的my.cnf。然而,它得到了我需要检查和修改的最后两个值,尽管语法与之前修改的值没有什么不同,但都没有执行 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/

我正在运行以下
sed
命令来编辑带有特定参数的
my.cnf
。然而,它得到了我需要检查和修改的最后两个值,尽管语法与之前修改的值没有什么不同,但都没有执行

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\u cache\u size=命令,并替换为其他随机命令,这些命令更有效,但仍然失败,就好像它将编辑到my.cnf文件中的距离有一些限制一样

\t
在sed中有一个特殊的含义:它代表制表符。因此,
/\table\u cache/
从不匹配。

从shell的角度来看,使用这个sed不是更好吗(而且最好使用t文件作为操作列表)


那么您要完全替换
[mysqld]
块的下半部分了?这在awk中会容易得多。您对替代解决方案感兴趣吗?(sed可以“读取”到文件的距离没有实际限制。)祝你好运。感谢awk提供的帮助,当我遇到问题时,我尝试先了解sed,而不是使用其他东西。谢谢,我知道这将是一件简单的事情,这仍然有点新鲜。我现在应该能够解决如何隔离它,这样就不会被认为是特殊的meaning@DavidDoleman:只要去掉反斜杠。无论如何,它在
\q
中没有任何作用。这样做很好,删除了所有行的反斜杠,效果很好。谢谢
sed -i 's/".*old_passwords=[0-9]*"/"# old_passwords=1"/g
   /innodb_buffer_pool_size=/d
   /\old_passwords=/ainnodb_buffer_pool_size=5G
   /innodb_additional_mem_pool_size=/d
   /\innodb_buffer_pool_size=/ainnodb_additional_mem_pool_size=100M
   /innodb_file_per_table/d
   /\innodb_additional_mem_pool_size=/ainnodb_file_per_table
   /innodb_log_file_size=/d
   /\innodb_file_per_table/ainnodb_log_file_size=125M
   /innodb_flush_log_at_trx_commit=/d
   /\innodb_log_file_size=/ainnodb_flush_log_at_trx_commit=1
   /max_connections=/d
   /\innodb_flush_log_at_trx_commit=/amax_connections=500
   /query_cache_size=/d
   /\max_connections=/aquery_cache_size=256M
   /query_cache_type=/d
   /\query_cache_size=/aquery_cache_type=0
   /query_cache_limit=/d
   /\query_cache_type=/aquery_cache_limit=1M
   /table_cache=/d
   /\query_cache_limit=/atable_cache=256
   /thread_cache_size=/d
   /\table_cache=/athread_cache_size=4
   /innodb_flush_method=/d
   /\\thread_cache_size=/ainnodb_flush_method=O_DIRECT'  /home/david/systems/zabbix/2.2/2.2.5/confs/my.cnf