sed
コマンドは、ストリームエディタと呼ばれ、ファイルの内容を直接変更せずに、様々なテキスト処理を自動化できる強力なツールです。この記事では、sed
コマンドの基本的な使い方から、実践的な応用例まで、わかりやすく解説します。
sed コマンドとは?
sed
コマンドは、以下の特徴を持つテキスト処理ツールです。
- ストリームエディタ: ファイル全体をメモリに読み込まず、一行ずつ処理するため、巨大なファイルでも効率的に処理できます。
- 非破壊編集: 元のファイルを直接変更せず、処理結果を標準出力に出力します。そのため、誤った編集をしてしまっても、元のファイルが壊れる心配はありません。
- 強力なパターンマッチング: 正規表現を使って、複雑な文字列パターンを検索・置換できます。
- スクリプト実行: 複数の編集コマンドをまとめて実行できます。
基本的な使い方
sed
コマンドの基本的な構文は以下の通りです。
sed '編集コマンド' ファイル名
編集コマンドは、s/検索文字列/置換文字列/
のように、スラッシュで区切られた形式で指定します。
例1: 文字列の置換
example.txt
というファイルの中に "old"
という文字列があった場合、"new"
に置換するには、以下のコマンドを実行します。
sed 's/old/new/' example.txt
このコマンドは、example.txt
ファイルの内容を標準出力に出力しますが、"old"
という文字列は "new"
に置換されています。
例2: ファイルに直接変更を適用する
-i
オプションを使うと、元のファイルに直接変更を適用できます。
sed -i 's/old/new/' example.txt
注意: -i
オプションを使うと、元のファイルが変更されるため、実行前にバックアップを取っておくことをお勧めします。
応用例
ここからは、sed
コマンドの応用例をいくつか紹介します。
例3: 行の削除
"delete me"
という文字列を含む行を削除するには、以下のコマンドを実行します。
sed '/delete me/d' example.txt
/パターン/d
は、パターンにマッチする行を削除するコマンドです。
例4: 行の挿入
"insert me"
という文字列を各行の先頭に挿入するには、以下のコマンドを実行します。
sed 's/^/insert me/' example.txt
^
は行の先頭を表す正規表現です。s/^/置換文字列/
は、行の先頭に置換文字列を挿入するコマンドです。
例5: 複数のコマンドを組み合わせる
複数のコマンドを ;
で区切って指定すると、複数の編集処理を一度に実行できます。
sed 's/old/new/; /delete me/d' example.txt
このコマンドは、"old"
を "new"
に置換し、"delete me"
を含む行を削除します。
例6: 特定の行だけを処理する
,
を使って行番号を指定すると、特定の範囲の行だけを処理できます。
sed '1,5s/old/new/' example.txt
このコマンドは、1行目から5行目までの "old"
を "new"
に置換します。
例7: 正規表現を使った複雑な置換
正規表現を使うと、より複雑な文字列パターンを検索・置換できます。
例えば、日付の形式を YYYY-MM-DD
から MM/DD/YYYY
に変換するには、以下のコマンドを実行します。
sed -E 's/([0-9]{4})-([0-9]{2})-([0-9]{2})/\2\/\3\/\1/' example.txt
このコマンドでは、以下の正規表現を使用しています。
([0-9]{4})
: 4桁の数字 (年)([0-9]{2})
: 2桁の数字 (月、日)\1
,\2
,\3
: それぞれの括弧で囲まれた部分文字列
-E
オプションは、拡張正規表現を使うことを指定します。
実践的な事例
sed
コマンドは、ログファイルの解析、設定ファイルの編集、プログラミングコードの修正など、様々な場面で活用できます。
例8: ログファイルから特定のエラーメッセージを抽出する
sed -n '/ERROR/p' error.log
このコマンドは、error.log
ファイルから "ERROR"
という文字列を含む行を抽出します。
例9: 設定ファイルのコメントを削除する
sed 's/#.*//' config.ini
このコマンドは、config.ini
ファイルから #
で始まるコメント行を削除します。
例10: プログラミングコードの変数名を一括変更する
sed 's/old_variable/new_variable/g' source.py
このコマンドは、source.py
ファイル内の全ての "old_variable"
を "new_variable"
に置換します。g
は、行内の全てのマッチを置換することを指定するオプションです。
まとめ
sed
コマンドは、テキスト処理を自動化するための強力なツールです。基本的な使い方をマスターすれば、日々の作業効率を大幅に向上させることができます。ぜひ、sed
コマンドを使いこなして、快適な Linux/macOS ライフを送ってください。