linuxでテキストファイルを編集するのを自動化したい場合が結構ある。たとえばApacheなどのプログラムをインストールするときに設定値を置換するなど。bashでこういうことをする場合はsedなどで置換を行うとよい。sedの簡単な使い方を説明します。
以下の例で頻繁的に使っている-i オプションは指定したファイルをそのまま上書きします。パイプでつないだり、リダイレクトしたりする場合は不要です。
空行を削除
sed -i '/^$/d' target.txt
文字列を削除
sed -i 's/文字列//g' target.txt
文字列を含む行を削除
sed -i '/文字列/d' target.txt
設定ファイルの特定の行を削除するときに使えます。
対象文字列を置換文字列に置換
sed -i 's/対象文字列/置換後文字列/g' target.txt
設定ファイルの値を変更したりコメントアウトしたり、逆にコメントアウトを外すときに使えます。
指定行を削除(例では2~5行
sed -i '2,5d' target.txt
データ処理用にヘッダ行を削除したりするときに使えます。
私の場合、sedはOSインストール後の設定スクリプトでよく使います。 よくやる例を以下に示します。
/etc/sudoersファイルの中の 'Defaults requiretty' 行をコメントアウトします。
# sed -i 's/Defaults.*requiretty/#Default\trequiretty/g' /etc/sudoers
この結果
修正前)
Defaults requiretty
修正後)
# Defaults requiretty
/etc/sudoersファイルの中の '# %wheel ALL=(ALL) ALL' 行のコメントアウトを外してwheelグループにsudoを許可します。
# sed -i 's/^#\s%wheel\s*ALL=(ALL)\s*ALL$/%wheel\tALL=(ALL)\tALL/g' /etc/sudoers
この結果
修正前)
# %wheel ALL=(ALL) ALL
修正後)
%wheel ALL=(ALL) ALL