Bashスクリプトを書いていると、テキストの処理が必要になることがよくありますよね。sedコマンドは、そんな場面で大いに役立つツールの一つです。このブログでは、初心者の方に向けて、sedコマンドを使用してbashスクリプトを強化するための基本的な使い方を中心に解説します。
sedコマンドとは?
sedは、"stream editor"の略で、LinuxやUnix系システムで使用されるテキストを編集するためのコマンドラインツールです。sedはファイルや標準入力からテキストを読み込み、指定したパターンに基づいてテキストを変換または抽出することができます。sedは、特に大規模なデータセットを処理したいときや、定型的なテキスト変換が必要な場面で強力な効果を発揮します。
sedの基本的な使い方
まずはsedコマンドの基本的な使い方を確認しましょう。sedは通常以下のように使用します。
sed '編集コマンド' ファイル名
たとえば、"example.txt"というファイルの内容が以下のようだったとします。
Hello, World!
Welcome to sed tutorial.
このファイルの中の"World"を"Sed"に変換したい場合、次のコマンドを実行します。
sed 's/World/Sed/' example.txt
このコマンドは、"s"を使った置換コマンドで、"World"を"Sed"に置き換えています。デフォルトでは、sedは結果を標準出力に表示します。
sedでの基本パターン置換
1. すべての一致を置換する
前述のコマンドは、最初に一致したパターンだけを置換しますが、ファイル内のすべての"World"を"Sed"に置換したいときは、gフラグを使用します。
sed 's/World/Sed/g' example.txt
2. 特定の行を編集する
特定の行だけを編集したいときには、行番号を指定することができます。たとえば、2行目だけを変換する場合は次のようにします。
sed '2s/Welcome/Hello there/' example.txt
3. 特定範囲の行を編集する
行番号を範囲で指定することもできます。たとえば、1行目から2行目の"World"を"Sed"に変換したい場合は、次のように記述します。
sed '1,2s/World/Sed/' example.txt
高度なsedの使い方
複数の編集コマンドを実行する
複数の処理を一度に行いたい場合、-eオプションを使って複数の編集コマンドを渡すことができます。
sed -e 's/World/Sed/' -e 's/tutorial/guide/' example.txt
もしくは、一つのスクリプトファイルに記述してそれを実行することもできます。
正規表現を使った置換
sedはPOSIX準拠の正規表現をサポートしており、より複雑なパターンに基づく編集が可能です。たとえば、数字をすべて*に変換する場合は次のようにします。
sed 's/[0-9]/*/g' example.txt
ファイルのインライン編集
ここまではすべての出力を標準出力に出していますが、sedは-iオプションを使うことでファイルを直接編集することも可能です。
sed -i 's/World/Sed/g' example.txt
このコマンドは"example.txt"ファイル内のすべての"World"を"Sed"に直接書き換えます。
スクリプトと組み合わせて使う
sedコマンドをスクリプトと組み合わせることで、より効率的なテキスト処理を行うことができます。例えば、以下のようなスクリプトでは、特定のファイル中の単語を一括で変換することができます。
#!/bin/bash
if [ $# -ne 3 ]; then
echo "Usage: $0 old-word new-word file"
exit 1
fi
old_word=$1
new_word=$2
file=$3
sed -i "s/$old_word/$new_word/g" "$file"
このスクリプトは、古い単語を新しい単語に変換したいときに便利です。コマンドライン引数として古い単語、新しい単語、ファイル名を指定するだけで、スクリプトが置換を自動的に行ってくれます。
まとめ
sedは非常に強力で、高速なテキスト処理ツールです。その基本的な使い方と、一歩進んだ利用方法を学ぶことで、bashスクリプトに大きな力を与えることができます。スクリプトの効率化やテキスト処理の自動化に役立つsedは、初心者から上級者まで、幅広く活用できるため、ぜひ挑戦してみてください。
コメント