【Linux】在文件的指定位置插入数据

今天遇到一个似乎很棘手的问题,要在文件的中间,插入几条配置

这里就以my.cnf这个文件为例

  1 [mysqld]
  2 datadir=/var/lib/mysql
  3 socket=/var/lib/mysql/mysql.sock
  4 # Disabling symbolic-links is recommended to prevent assorted security risks
  5 symbolic-links=0
  6 # Settings user and group are ignored when systemd is used.
  7 # If you need to run mysqld under a different user or group,
  8 # customize your systemd unit file for mariadb according to the
  9 # instructions in http://fedoraproject.org/wiki/Systemd
 10 
 11 [mysqld_safe]
 12 log-error=/var/log/mariadb/mariadb.log
 13 pid-file=/var/run/mariadb/mariadb.pid
 14 
 15 #
 16 # include all files from the config directory
 17 #
 18 !includedir /etc/my.cnf.d

想要在第十行插入

init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake

于是想到了sed命令,通过-i选项可以修改文件本身

命令如下:

sed -i "10i init_connect=\'SET collation_connection = utf8_unicode_ci\'" /etc/my.cnf
sed -i "11i init_connect=\'SET NAMES utf8\'" /etc/my.cnf
sed -i "12i character-set-server=utf8" /etc/my.cnf
sed -i "13i collation-server=utf8_unicode_ci" /etc/my.cnf
sed -i "14i skip-character-set-client-handshake" /etc/my.cnf

通过sed -i "行数+i+空格+想要插入的语句"  想要插入的文件

即可插入

本来想用cat <<EOF

EOF

但发现这个好像只能插入到文件的最后,无法在中间插入

如果插入的数据比较多的话,就很麻烦了,过阵子有时间再做下批量插入数据比较多的

-----------华丽丽的分割线-----------

如果想在文中插入数据的话,可以使用这个方法

想要插入的文件,内容如下:
# cat -n test.txt 
     1  id=1,name=zhang1
     2  id=2,name=zhang2
     3  id=3,name=zhang3
     4  id=4,name=zhang4
     5  id=5,name=zhang5
     6  id=6,name=zhang6
     7  id=7,name=zhang7
     8  id=8,name=zhang8
     9  id=9,name=zhang9
    10  id=10,name=zhang10
    11  id=11,name=zhang11
    12  id=12,name=zhang12
    13  id=13,name=zhang13
    14  id=14,name=zhang14
    15  id=15,name=zhang15
    16  id=16,name=zhang16
    17  id=17,name=zhang17
    18  id=18,name=zhang18
    19  id=19,name=zhang19
    20  id=20,name=zhang20
    21

可以使用命令

sed -i "10i test=1\ntest=2\ntest=3\ntest=4" test.txt   

插入后的文件内容为

# cat -n test.txt 
     1  id=1,name=zhang1
     2  id=2,name=zhang2
     3  id=3,name=zhang3
     4  id=4,name=zhang4
     5  id=5,name=zhang5
     6  id=6,name=zhang6
     7  id=7,name=zhang7
     8  id=8,name=zhang8
     9  id=9,name=zhang9
    10  test=1
    11  test=2
    12  test=3
    13  test=4
    14  id=10,name=zhang10
    15  id=11,name=zhang11
    16  id=12,name=zhang12
    17  id=13,name=zhang13
    18  id=14,name=zhang14
    19  id=15,name=zhang15
    20  id=16,name=zhang16
    21  id=17,name=zhang17
    22  id=18,name=zhang18
    23  id=19,name=zhang19
    24  id=20,name=zhang20
    25

如果想要插入的内容比较繁琐的话,记得使用正确使用正则来处理文字

posted @ 2019-03-15 16:17  zclinux  阅读(814)  评论(0)    收藏  举报