このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。
Linuxコマンドの基本:行を置換する:sedコマンド

行を置換する:sedコマンド
テキスト処理において、特定の文字列を他の文字列に置換する操作は非常に重要です。sed
コマンドは、このような置換を効率的に行うための強力なツールです。ここでは、sed
コマンドを使用して行を置換する方法について詳しく解説します。

sedコマンドの概要
sed
(Stream Editor)は、非対話型のストリームエディタであり、テキストデータを一括で処理することができます。sed
コマンドを使用すると、ファイルを直接編集することなく、指定した編集操作の結果を標準出力に表示できます。
【書式】sed [オプション] '<スクリプト>' <対象ファイル>
[オプション]
:コマンドの動作を変更するためのオプション。'<スクリプト>'
:実行する編集コマンド。シングルクォートで囲みます。<対象ファイル>
:編集対象のファイル名。
サンプルファイルの作成
まず、sed
コマンドの動作を確認するためのサンプルファイルを作成します。
user01@ubuntu:~$ nano sample.txt
sample.txt
の内容
Cl
Col
Cool
Coool
CoolCool
CoolCoolCool
CoolCoolCoolCool
Coool!
Cooool!!
Coooool!!!
行を置換する
sed
コマンドのs
は、文字列を置換するためのコマンドであり、最も頻繁に使用されます。
sコマンドの基本書式
s/置換前文字列/置換後文字列/フラグ
- 置換前文字列:置換したい文字列または正規表現パターン。
- 置換後文字列:置換後の文字列。
- フラグ:省略可能。
g
などのフラグを指定できます。
例1:「Cool」を「Hot」に置換
次のコマンドでは、「Cool」を「Hot」に置換します。アドレス指定を省略しているため、ファイル全体が対象となります。
user01@ubuntu:~$ sed 's/Cool/Hot/' sample.txt
出力結果
Cl
Col
Hot
Coool
HotCool
HotCoolCool
HotCoolCoolCool
Coool!
Cooool!!
Coooool!!!
解説
s/Cool/Hot/
:各行で最初に見つかった「Cool」を「Hot」に置換します。- 5行目以降で「Cool」が残っているのは、各行で最初の一致のみが置換されるためです。
置換は最初の一致のみが対象
たとえば、「CoolCoolCool」という文字列に対して、上記のコマンドを適用すると以下のようになります。
CoolCoolCool
↓
$ sed 's/Cool/Hot/' sample.txt
[Cool]を[Hot]に置換
↓
HotCoolCool
最初の「Cool」だけが「Hot」に置換され、残りはそのままです。
例2:すべての一致を置換する(g
フラグの使用)
すべての「Cool」を「Hot」に置換するには、g
フラグを使用します。
user01@ubuntu:~$ sed 's/Cool/Hot/g' sample.txt
出力結果
Cl
Col
Hot
Coool
HotHot
HotHotHot
HotHotHotHot
Coool!
Cooool!!
Coooool!!!
解説
g
フラグを付けることで、行内のすべての「Cool」が「Hot」に置換されます。
例3:正規表現を使用した置換
置換前文字列に正規表現を利用することができます。次のコマンドでは、「C」で始まり「l」で終わる文字列を「Hot」に置換しています。
user01@ubuntu:~$ sed 's/C.*l/Hot/g' sample.txt
出力結果
Hot
Hot
Hot
Hot
Hot
Hot
Hot
Hot!
Hot!!
Hot!!!
解説
C.*l
:C
で始まりl
で終わる任意の文字列を表す正規表現。- 全行でパターンに一致する部分が「Hot」に置換されています。
注意点
- 正規表現を使用する際は、スクリプト全体をシングルクォートで囲むことをおすすめします。
例4:特定の文字を削除する
置換後文字列を空にすることで、特定の文字を削除することができます。次の例では、「!」を削除しています。
user01@ubuntu:~$ sed 's/!//g' sample.txt
出力結果
Cl
Col
Cool
Coool
CoolCool
CoolCoolCool
CoolCoolCoolCool
Coool
Cooool
Coooool
解説
s/!//g
:全行で「!」を空文字に置換(削除)します。
例5:置換が発生した行のみを表示する
-n
オプションとp
フラグを組み合わせることで、置換が行われた行だけを表示することができます。これは、大量のテキストから置換が行われた箇所を確認するのに便利です。
user01@ubuntu:~$ sed -n 's/!//gp' sample.txt
出力結果
Coool
Cooool
Coooool
解説
-n
オプション:デフォルトの出力を抑制します。p
フラグ:置換が行われた行を表示します。- 「!」が存在して置換が発生した行のみが出力されています。
不要なファイルを削除する
作業が終わったら、サンプルファイルを削除します。
user01@ubuntu:~$ rm sample.txt
まとめ
s
コマンド:sed
で文字列を置換するための基本コマンド。- フラグの活用
・g
:行内のすべての一致部分を置換。
・p
:置換が発生した行を表示(-n
オプションと併用)。 - 正規表現の利用:柔軟なパターン指定が可能。
- 文字の削除:置換後文字列を空にすることで削除を実現。
sed
コマンドを使いこなすことで、テキスト処理の作業効率を大幅に向上させることができます。特に置換操作は日常的によく使われるため、ぜひ習得しておきましょう。