CUBE SUGAR STORAGE

技術系のことかきます。
Recent Tweets @

設定ファイルの何行目に行を追加したい、とかこのセクションに行を追加したい、っていう場面は多い。 エディタでやるのも良いけど手順書にするなら CUI のコマンドだけで表現したいところ。 今回はそれを sed コマンドで片付ける方法について。

例えば以下の MySQL 設定ファイルがあるとする。

$ cat /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

デフォルトのストレージエンジンを InnoDB にするために [mysqld] セクションに default-storage-engine=InnoDB の設定を追加したい。 そんなときはセクションにマッチさせた場所に a (append) コマンドで行を挿入すると良い。
$ sudo sed -i -e "/^\[mysqld\]$/a default-storage-engine=InnoDB" /etc/my.cnf

結果を確認するとちゃんと挿入できている。
$ cat /etc/my.cnf
[mysqld]
default-storage-engine=InnoDB
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

あるいは上記の例では 1 行目の直後に追加したい、という内容でも等価なので 1 行目の後に a コマンドしても良い。
$ sudo sed -i -e "1a default-storage-engine=InnoDB" /etc/my.cnf

もしマッチした場所や特定行の直前に追加したい場合には i (insert) コマンドを使うと良い。 先ほど追加したストレージエンジンの設定の直前に bind-address の設定を入れてみる。
$ sudo sed -i -e "/^default-storage-engine=InnoDB$/i bind-address=127.0.0.1" /etc/my.cnf

結果を確認する。
$ cat /etc/my.cnf 
[mysqld]
bind-address=127.0.0.1
default-storage-engine=InnoDB
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

ばっちり。
  1. act2012bl reblogged this from momijiame
  2. momijiame posted this