このエントリーをはてなブックマークに追加

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



記事一覧へ