このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。

【Linux】ファイルを加工して表示する:sedコマンド

sedコマンドの概要

 sed (stream editor) コマンドは、テキストのストリーム(ファイルまたは標準入力)を一行ずつ処理し、指定された編集コマンドを適用してテキストを変換または表示するためのツールです。ファイルの内容を一時的に加工したり、テキストの一部を置換、削除、変換するために広く使用されます。シェルスクリプトやコマンドライン操作でテキストを簡単に編集できるため、非常に便利です。

【構文】
sed [オプション] 編集コマンド [ファイル名]

コマンドの主なオプション

オプション説明
-e複数の編集コマンドを指定します。
-f編集コマンドが記述されているファイルを指定します。
-i入力ファイルを上書きします。
コマンドの主なオプション

コマンドの主な編集コマンド

コマンド説明使用例
s置換。特定のパターンを別の文字列に置換する。sed s/old/new/ filename: "old" を "new" に置換する。(マッチする文字列が1行に複数あっても先頭のみ置換)
sed s/old/new/g filename: "old" を "new" に置換する。(マッチする文字列はすべて置換)
d削除。特定の行を削除する。sed 2d filename : 2行目を削除する。
y文字の変換。指定した文字を別の文字に変換する。sed y/abc/ABC/ filename : "a" を "A" に、"b" を "B" に、"c" を "C" に変換する。
コマンドの主な編集コマンド

コマンドの使用例と解説

1.基本的な置換

サンプルファイルの作成:filename.txt

まず、以下の内容を持つサンプルファイル「filename.txt」を作成します。

・「nano filename.txt」コマンドを実行します。

nanoエディタを起動して、「filename.txt」ファイルを作成します。

user01@ubuntu-vm:~$ nano filename.txt

以下の内容を入力します。

apple apple
banana banana
apple apple

 入力したら、「Ctrl + S」キーを入力して保存、「Ctrl + X」キーでnanoエディタを終了させます。

・「sed s/apple/orange/ filename.txt」コマンドを実行

 ファイル「 filename.txt」内の "apple" を "orange" に置換します。このコマンドは出力を標準出力に表示します。マッチする文字列が1行に複数あっても先頭のみ置換します。

user01@ubuntu-vm:~$ sed s/apple/orange/ filename.txt
orange apple
banana banana
orange apple

2.すべての一致を置換

・「sed s/apple/orange/g filename.txt」コマンドを実行

 ファイル「 filename.txt」内のすべての "apple" を "orange" に置換します。編集コマンドの後ろに「g」を指定することで、ファイルに含まれる一致するすべての文字列を置換することができます。

user01@ubuntu-vm:~$ sed s/apple/orange/g filename.txt
orange orange
banana banana
orange orange

3.複数の編集コマンドを指定

・「sed -e s/apple/orange/ -e s/banana/grape/ filename.txt」コマンドを実行

 「-e」オプションを使用して、複数の置換操作を指定します。この例では "apple" を "orange" に、"banana" を "grape" に置換します。

user01@ubuntu-vm:~$ sed -e s/apple/orange/ -e s/banana/grape/ filename.txt
orange apple
grape banana
orange apple

4.スクリプトファイルを使用

以下のコマンドを実行します。

  • echo "s/apple/orange/" > script.sed」コマンドを実行
  • sed -f script.sed filename.txt」コマンドを実行

 「-f」オプションを使用して、スクリプトファイル 「script.sed」から「sed 」コマンドを読み込み、「filename.txt」に適用します。

user01@ubuntu-vm:~$ echo "s/apple/orange/" > script.sed
user01@ubuntu-vm:~$ sed -f script.sed filename.txt
orange apple
banana banana
orange apple

スクリプトファイル 「script.sed」の内容を確認します。

・「cat script.sed」コマンドを実行

user01@ubuntu-vm:~$ cat script.sed
s/apple/orange/

5.ファイルを直接編集

・「sed -i s/apple/orange/ filename.txt」コマンドを実行して、「cat filename.txt」でファイルの内容を確認します。

 「 -i」オプションを使用して、「filename.txt」ファイル内の "apple" を "orange" に直接置換します。この操作は元のファイルを編集します。

user01@ubuntu-vm:~$ sed -i s/apple/orange/ filename.txt
user01@ubuntu-vm:~$ cat filename.txt
orange apple
banana banana
orange apple

6.特定の行を削除

・「sed 2d filename.txt」コマンドを実行

ファイル「 filename.txt」の2行目を削除します。

user01@ubuntu-vm:~$ sed 2d filename.txt
orange apple
orange apple

7.文字の変換

・「sed y/abc/ABC/ filename.txt」コマンドを実行

ファイル「filename.txt」内の "a" を "A" に、"b" を "B" に、"c" を "C" に変換します。

user01@ubuntu-vm:~$ sed y/abc/ABC/ filename.txt
orAnge Apple
BAnAnA BAnAnA
orAnge Apple

8.作成したファイルの削除

この演習のコマンドで作成したファイルを削除します。

・「rm filename.txt script.sed」コマンドを実行して、「ls」コマンドで確認します。

user01@ubuntu-vm:~$ rm filename.txt script.sed 
user01@ubuntu-vm:~$ ls
snap          テンプレート  ドキュメント  ピクチャ      公開
ダウンロード  デスクトップ  ビデオ        ミュージック

まとめ

 「sed」コマンドは、テキストのストリーム編集を効率的に行うための強力なツールです。主要なオプションや編集コマンドを理解することで、さまざまなテキスト操作を簡単に実行できるようになります。これにより、日常的なテキスト処理やシェルスクリプトの作成がより効率的になります。