Linuxのコマンドの中でも、「sed(セド)」はテキストの置換や削除といった処理を得意とする強力なツールです。特に、ログファイルの編集や設定ファイルの一括変更、スクリプト内でのテキスト処理において大活躍します。
本記事では、sedの基本から応用まで、コマンドの使い方や構文、具体的な活用例までをわかりやすく解説します。これからsedを使いたい方はもちろん、すでに使っている方にも役立つ情報を丁寧にまとめています。
sed
は「stream editor」の略で、テキストファイルを一行ずつ処理していくフィルター型のツールです。
ファイルの内容をその場で編集するのではなく、標準出力として結果を返すのが特徴です。もちろん、オプションによって直接ファイルを書き換えることも可能です。
sedは、正規表現を使って柔軟なパターンマッチングが可能な点でも非常に強力です。
まずは、もっともよく使う「文字列の置換」について基本構文を見てみましょう。
sed 's/検索文字列/置換文字列/' ファイル名
例:
sed 's/apple/orange/' fruits.txt
このコマンドは、fruits.txt
の各行にある最初のapple
という文字列をorange
に置き換えます。なお、元ファイル自体は変更されません。
sed 's/apple/orange/g' fruits.txt
このように、各行に出現するすべてのapple
をorange
に置換します。
-i
オプションを使うことで、ファイルの内容を直接書き換えることができます。
sed -i 's/old/new/g' filename.txt
バックアップを取りたい場合は以下のようにします。
sed -i.bak 's/old/new/g' filename.txt
これにより、元のファイルはfilename.txt.bak
として保存されます。
sedでは行番号を指定することで、対象の行だけに処理を行うことが可能です。
sed '3s/foo/bar/' sample.txt
これは3行目のfoo
をbar
に置き換える例です。
範囲指定も可能です:
sed '2,5s/dog/cat/' animals.txt
2行目から5行目までのdog
をcat
に置き換えます。
特定の行を削除するにはd
コマンドを使用します。
sed '2d' file.txt
これは2行目を削除します。
複数行の削除もできます:
sed '2,4d' file.txt
2行目から4行目を削除します。
特定のキーワードを含む行を削除するには、次のように書きます。
sed '/error/d' log.txt
これはlog.txt
内の「error」という文字列を含む行をすべて削除します。
テキストの前後に行を追加することも可能です。
sed '2i\This is inserted line' file.txt
2行目の前に「This is inserted line」という行を追加します。
sed '2a\This is appended line' file.txt
2行目の後に「This is appended line」という行を追加します。
1つのsedコマンドで複数の処理を同時に行うには、「-e」オプションを使います。
sed -e 's/apple/orange/g' -e 's/banana/mango/g' fruits.txt
これにより、apple
はorange
に、banana
はmango
に一括で置換されます。
または、セミコロン(;
)で連結してもOKです。
sed 's/apple/orange/g; s/banana/mango/g' fruits.txt
sedでは正規表現を活用することで、より柔軟なパターン指定が可能です。
sed -E 's/^[0-9]+$/<NUM>/' data.txt
この例では、数字だけで構成された行をすべて<NUM>
に置き換えます。
sed 's/^.\{1\}//' file.txt
各行の先頭1文字を削除します。
sedはシェルスクリプトに組み込むことで自動化に非常に便利です。
#!/bin/bash
for file in *.log; do
sed -i 's/error/ERROR/g' "$file"
done
このスクリプトは、カレントディレクトリ内のすべての.log
ファイルの中でerror
をERROR
に置換します。
-i
オプションを使うと元ファイルが上書きされるので注意が必要です。バックアップを取る習慣をつけましょう。-i
の後に空白を入れずにバックアップ拡張子を指定する必要があります(例:-i ''
)。sedは、一見とっつきにくいかもしれませんが、習得すれば非常に強力なテキスト処理ツールです。
日常のちょっとした置換から、ログファイルの整形、大規模な一括編集まで幅広く活躍します。
慣れるまでは出力結果を標準出力で確認しながら、少しずつコマンドのバリエーションに挑戦してみてください。
あなたのLinuxスキルをワンランク上に押し上げてくれるはずです。