LoginSignup
7
10

More than 5 years have passed since last update.

sedを使ってiniファイルのコメントアウト、アンコメントを行う方法

Posted at

sedとは

sedはテキストファイルの文字列を置換したい場合によく使われるコマンドです。

確実性や再利用性を考えると、テキストファイルの一部を書き換えたい場合は、
vimで編集するよりも sed コマンドを実行した方がいい場合もあります。

iniファイルのコメントアウト

例えば以下のようなiniファイルがあるとします。

$ cat conf.ini
servers[]="192.168.56.102"
servers[]="192.168.56.103"
servers[]="192.168.56.104"

192.168.56.102 のサーバーをメンテナンスしたいのでコメントアウトしたい場合、
sed を使って以下のように実行できます。
iniファイルは先頭に;(セミコロン)を付けることでコメントアウト出来ます。

$ sed -i 's/.*192.168.56.102/;&/g' conf.ini 

-i のオプションと最後のファイル名を指定することで、ファイルをそのまま書き換える事が出来ます。
s/ から始まる部分は正規表現を使って記述することが可能です。/までが置換前文字列、
次の/までが置換後文字列になります。

&は正規表現にマッチした文字列を表しますので、;& と書くことで内容を変更せず、コメントアウトだけが可能です。
この場合&には、servers[]="192.168.56.102 が入ることになります。

iniファイルのアンコメント

アンコメントをする場合は以下のコマンドです。
先ほどの置換前文字列を () で囲んでグルーピングします。
()はそれぞれバックスラッシュでエスケープする必要があります。
()にマッチした文字列は、\1で表現可能です。
なお、複数の括弧がある場合は、\2,\3・・・のように表現が可能です。

$ sed -i 's/;\(.*192.168.56.102\)/\1/g' conf.ini

sedの基本正規表現と拡張正規表現

sedには 基本正規表現拡張正規表現があります。
何もオプションを指定しなければ基本となり、 -r オプションを付けると拡張となります。

拡張正規表現は書き方が少し変わり、場合によっては基本正規表現よりも簡潔に書くことが出来ます。
アンコメントを拡張正規表現で行うと、以下のようになります。
括弧の前のバックスラッシュによるエスケープが不要となります。

sed -i -r 's/;(.*192.168.56.102)/\1/g' conf.ini
7
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
10