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 ライフを送ってください。

おすすめの記事