【2025年版】Linuxのsedコマンドの使い方と活用事例 + 無料チートシート

【2025年版】Linuxのsedコマンドの使い方と活用事例 + 無料チートシート

Linuxのsedコマンドを使えば、テキストエディターでファイルを開かずに、文字列の検索、置換、挿入、削除が可能となります。このLinuxコマンドは、パイプによる入力やさまざまなファイル形式にも対応しており、Regex(正規表現)も使用できるため、複雑なパターンの検索や編集にも活用できます。

さまざまな用途に対応するsedコマンドを理解することで、システム管理者が仮想専用サーバー(VPS)を効率的に管理する上で役立ちます。この記事では、Linuxのsedコマンドの基本構文や主なオプション、サブコマンドについて解説。また、Linux VPSの管理に役立つsedの使用例や活用事例もご紹介します。

sedコマンドのオプション

sedコマンドの一般的な構文は以下のとおりです:

sed options 'script' file_name

sedコマンドの動作を変更するには、以下のコマンドラインオプションを追加します:

  • –help – コマンドの使用方法を表示します。
  • –debug – プログラムの実行と入力をターミナルに注釈付きで表示します。
  • -i – 元のファイルを上書きします。
  • -n – pコマンドを使用しない限り、自動出力が無効になります。
  • -u – 出力を最小限に抑えます。
  • –posix – POSIX準拠のsed拡張を無効にし、移植性の高いスクリプトの記述を簡単にします。
  • -e – 複数のコマンドを順に実行するために指定します。
  • -b – 入力ファイルをバイナリモードで開きます。
  • -l – lコマンドで使用する行の折り返し幅を指定します。

スクリプトには、サブコマンド、検索パターン、置換文字列、フラグが含まれます。

これらの要素は引用符(’)で囲まれ、スラッシュ(/)、バックスラッシュ(\)、パイプ(|)などのデリミタで区切られます。要素の順序はサブコマンドによって異なる場合があります。例えば、sコマンドsubstituteコマンドは、正規表現パターンを別の文字列に置き換えます。構文は以下のようなものとなります:

's/regex_pattern/new_pattern/flags'

置換の動作を変更するには、以下のフラグを使用します:

  • g – 最初の一致だけでなく、すべての一致箇所を対象に置換します。
  • Number – 指定した行番号のみを対象に置換します。
  • p – パターンの置換に成功した行を出力します。
  • i – 大文字と小文字を区別して置換を行います。

ポイント

sサブコマンドでは、複数のフラグを同時に使用できます。例えば、giフラグを追加すると、すべての一致箇所に対して大文字と小文字を区別した置換が可能になります。

sedのインストール方法

多くのLinuxディストリビューションには、ストリームエディタ(sedパッケージ)があらかじめインストールされています。お使いのシステムにこのツールが含まれていない場合は、以下のステップでインストールしてください:

重要!このチュートリアルでは、弊社のVPSはUbuntu 22.04上で稼働しています。別のディストリビューションやバージョンを使用している場合、コマンドが異なる可能性があります。

  • TerminalやPuTTYなどのSSHクライアントを使ってVPSに接続します。Hostingerをご利用の場合は、hPanelブラウザターミナルを使用できます。
  • hPanelでは、VPS概要メニューのSSHアクセスタブに表示されています。
  • 次のコマンドを入力してリポジトリを更新します:
sudo apt-get update
  • 次のコマンドを入力してsedパッケージをインストールします:
sudo apt-get install sed
  • インストールが正常に完了したかを確認するには、以下のコマンドを実行してください:
sed --version

sedコマンドの使用例

このセクションでは、sedコマンドの基本的な使い方を理解するために、10個の具体的な例をご紹介します。

重要!以下のコマンドはすべて、元のファイルを変更しません。変更を直接適用するには、-iオプションを追加してください。

sedで文字列を検索して置換する方法

sedコマンドは、テキストの置換によく使われます。このツールは、ファイル内で指定したパターンを検索し、希望する文字列に置き換えます。

sコマンドを使って、置換したい文字列と新しい文字列を指定することができます。構文は以下のとおりです:

sed 's/old_string/new_string/' samplefile.txt

プレースホルダーは実際の値に置き換えてください。例えば、次のコマンドはscenery.txtファイル内の「images」という単語を「photos」に置き換えます。

sed 's/images/photos/' scenery.txt

文字列にスラッシュ記号が含まれている場合は、バックスラッシュ(\) やパイプ(|)など、別の区切り文字を使用してください。

sedで行内の特定のパターンのn番目の出現位置を置換する方法

行内に同じパターンが複数回出現する場合、次のコマンド構文を入力して特定のものだけを置換することができます。

sed 's/old_string/new_string/#' samplefile.txt

ハッシュ(#)記号をパターンの出現順番号に置き換えてください。例えば、次のコマンドは playlist.txtファイル内の行で、「music」という単語の最初の出現を「song」に置き換えます。

sed 's/music/song/1' playlist.txt

sedで行内のすべての一致するパターンを置換する方法

デフォルトでは、sedコマンドは指定した文字列の最初の一致のみを置換し、その後すぐに次の入力行に移ります。同じ行内のすべての一致するパターンを置換するには、gフラグを追加します。sedスクリプトは次のようになります。

sed 's/old_string/new_string/g' samplefile.txt

例えば、animals.txt ファイル内の行で「eagle」を含むすべての出現箇所を「falcon」に置き換えるには、次のコマンドを実行します。

sed 's/eagle/falcon/g' animals.txt

sedでn番目以降のすべての出現位置を置換する方法

同じ行内のすべてのパターンを置換するのではなく、数字とgフラグを組み合わせることで、特定の出現位置から置換を開始できます。sedスクリプトは次のとおりです:

sed 's/old_string/new_string/#g' samplefile.txt

例えば、次のコマンドはastrology.txtファイル内で「pisces」の2回目以降の出現箇所をすべて「aquarius」に置き換えます。

sed 's/pisces/aquarius/2g' astrology.txt

sedで各単語の先頭文字を()で囲む方法

各単語の先頭の文字を括弧で囲んで表示するには、次のスクリプトを使用します。

echo "desired_sentence" | sed -E 's/(\b\w)/(\1)/g'

例えば、「An example of the sed command」という文字列の各単語の先頭文字を括弧で囲んで表示するには、次のように入力します:

echo "An example of the sed command" | sed -E 's/(\b\w)/(\1)/g'

ファイル内の各単語の先頭文字を括弧で囲むためには、echoコマンドを省略し、コマンドの末尾に入力ファイルを指定する必要があります。

sedで特定の行番号の文字列を置換する方法

n行目の文字列を置き換えるには、sの前にその行番号を指定します:

sed '#s/old_string/new_string/' samplefile.txt

例えば、foods.txtの2行目にある「cake」という単語を「bread」に置き換えるには、次のように入力します:

sed '2s/cake/bread/' foods.txt

/pフラグを使って置換した行を複製する方法

sedコマンドで変更された行を追加で出力したい場合は、pまたはprintフラグを使用します。一般的な構文は以下のとおりです:

sed 's/old_string/new_string/p' samplefile.txt

例えば、gadgets.txtファイル内の「phones」という語を「tablets」に置き換え、結果を出力するには、次のコマンドを実行します。

sed 's/phones/tablets/p' gadgets.txt

検索パターンが含まれておらず置換が行われなかった場合、その行の元の文字列がターミナルに表示されます。

sedで複数行にわたって文字列を置換する方法

sedコマンドでは、スクリプト内で行番号の範囲を指定することで、特定の行のみを変更できます。構文は以下のとおりです:

sed '#,# s/old_string/new_string/' samplefile.txt

例えば、次のコマンドはcountries.txtファイルの3行目から5行目にある「germany」を「france」に置き換えます:

sed '3,5 s/germany/france/' countries.txt

sedで置換された行だけを表示する方法

デフォルトでは、ストリームエディタ(sed)はファイル全体の内容を出力します。出力を簡潔に見やすくするには、-nオプションとpコマンドを組み合わせて、マッチした行だけを表示させます。基本的な構文は次のとおりです:

sed -n 's/old_string/new_string/p' samplefile.txt

例えば、colors.txtファイル内の行で「green」の3回目の一致を「blue」に置き換え、変更された行のみをターミナルに表示するには、次のように入力します:

sed -n 's/green/blue/3p' colors.txt

sedで特定のファイルから行を削除する方法

dコマンドやdeleteコマンドを使うと、テキストエディターを使わずにファイル内の行を削除できます。例えば、特定の行番号を削除するには、次の構文を使用します:

sed '#d' samplefile.txt

削除したい行番号の部分をハッシュ(#)の代わりに入力してください。例えば、cities.txtファイルの1行目を削除するには、次のコマンドを実行します:

sed '1d' cities.txt

また、sedコマンドを使って特定の範囲内にあるすべての行を削除することもできます:

sed '#,#d' samplefile.txt

ハッシュ(#)記号の部分を、削除したい開始行と終了行の番号に置き換えてください。例えば、cars.txtファイルの1行目から3行目までを削除するには、次のように入力します:

sed '1,3d' cars.txt

また、dサブコマンドとドル記号($)を組み合わせることで、ファイルの最終行を削除することもできます。次のように入力します。

sed '$d' samplefile.txt

ファイルの末尾から特定の行番号を削除したい場合は、次の構文を使用します:

sed '#,$d' samplefile.txt

例えば、次のコマンドはbooks.txtファイルの最後から2番目の行を削除します。

sed '2,$d' books.txt

行を削除するだけでなく、ファイル内の特定のパターンを含む行を削除することも可能です。その場合は、次のようにスクリプト内に正規表現パターンを指定してください:

sed '/pattern/d' samplefile.txt

例えば、filestrings.txtファイルから「oabo」の出現を削除するには、次のコマンドを実行します:

sed '/oabo/d' filestrings.txt

sedコマンドの使用例

このセクションでは、サーバー管理におけるさまざまな用途に応じたsedコマンドの使い方をご紹介します。

sedを使って複数ファイルを一括処理する

一般的に、sedコマンドを使ってファイルを一括編集する方法は2つあります。

1つ目は、編集対象のファイルを個別に指定する方法です。この方法では、置換したいすべての入力ファイルをコマンドの末尾にスペースで区切って列挙します。構文は次のとおりです。

sed 's/old_string/new_string/g' filename1.txt filename2.txt

このコマンドは、2つのテキストファイル内の old_stringのすべての出現を同時に検索・置換します。

2つ目は、findコマンドを使ってファイルをスキャンする方法です。

この方法では、指定したパターンを含むファイルをディレクトリ内で自動的に検索します。構文は次のとおりです:

find /directory/path/file -type f -exec sed -i 's/old_string/new_string/g' {} \;

/directory/path/fileの部分は、処理したいファイルが含まれているディレクトリのパスに置き換えてください。

2つ目の方法を使う場合、誤って置換してしまったときに備えて、バックアップファイルを作成しておくことをおすすめします。または、-iオプションを省略することで、元のファイルを変更せずに編集内容を確認できます。

sedを使ってログファイルを解析する

Linuxのsedコマンドは、パターンの編集だけでなくログ解析にも役立ちます。ログファイル内から特定のパターンを簡単に検索し、診断しやすいように結果を抽出できます。

そのためには、>記号を使って一致したパターンの出力を別のテキストファイルに保存します。用途によってコマンド内容は変わりますが、基本的な構文は以下のとおりです:

sed -n 's/pattern/p' logfile.log > extracted_data.txt

検索したいデータに応じて、正規表現パターンを変更してください。例えば、IPアドレス、エラーメッセージ、タイムスタンプなどが該当します。以下は、ログに記録されたエラーを抽出してエクスポートする例です:

sed -n 's/Error: \(.*\)/\1/p' logfile.log > error_logs.txt

sedを使ってHTMLやXMLのタグを操作する

Linuxのsedコマンドを使えば、コード内の文字列を簡単に置換できます。例えば、特定のHTMLやXMLタグを検索し、置換コマンドを使ってその属性を変更することができます。以下はその構文です:

sed 's/<tag attribute="old_pattern">/<tag attribute="new_pattern"/' file.html

変更したいタグや属性によって、コマンドは異なります。例えば、以下のsedコマンドは、すべての見出しタグのcolor属性をblackに変更します:

sed 's/\(<h[1-6].*color:\) [^;]*/\1 black/g' webpage.html

このコマンドは、以下のようなHTMLコードのパターンを検索し、colorの値を新しい文字列に置き換えます:

<h1 style="color: value;">Heading 1</h1>

sedを使って外部ファイルを処理する

複雑なsed操作では、複数のスクリプトを含むことがあります。-eオプションを使って1つのコマンドにまとめることもできますが、可読性が低く、ミスが起きやすくなります。

代わりに、複数のスクリプトを記述した外部のSEDファイルを作成する方法があります。手順は以下のとおりです:

  • nanoコマンドを実行して新しいスクリプトファイルを作成し、テキストエディタを開きます。scriptの部分は任意のファイル名に置き換えてください。
nano script.sed
  • スクリプトを記述する際は、各行に1つずつスクリプトを書き、アポストロフィは使わないようにしてください。以下のようになります:
s/old_pattern1/new_pattern1/g
/old_pattern2/d
  • Ctrl+Xを押してエディタを閉じ、Yを押してファイルを保存します。
  • コマンドに -fオプションを追加して、作成したファイルを読み込むことでスクリプトを実行できます。構文は次のとおりです:
sed -f script.sed destination_file.txt

sedで正規表現の後方参照を使う

後方参照を使うと、正規表現で一致したパターンを再利用できるため、同じパターンを繰り返し書く必要がなくなり、スクリプトを簡潔にできます。

sedコマンドで参照されるパターンは「キャプチャグループ」と呼ばれます。これは括弧で囲んで定義され、拡張正規表現を使う際にはバックスラッシュを付けて記述します。

キャプチャグループを参照するには、バックスラッシュ(\)と、その一致したパターンの順番を示す番号を使用します。例えば、\1は最初にキャプチャされた正規表現のパターンを再利用します。

後方参照は、パターンの置換や並べ替えに便利です。例えば、以下のsedコマンドは後方参照を使って「姓 名」の順序を「名 姓」に入れ替えています:

echo "Doe, John" | sed 's/\(.*\), \(.*\)/\2 \1/'

2つの正規表現パターン \(.*\) は「Doe」と「John」をそれぞれキャプチャし、後方参照として利用できるようにします。新しい文字列では2番目の後方参照から始まっているため、出力は「John Doe」となります。

まとめ

Linuxのストリームエディタ(sedコマンド)は、正規表現を使ってファイル内のパターンを検索・変更するためのツールです。構文は、sedコマンド本体、オプション、スクリプト、対象ファイルから構成されます。

sedのコマンドラインオプションは動作を変更するために使用され、スクリプト部分は、正規表現に一致したパターンに対してどのように処理を行うかを指定します。このスクリプトにはサブコマンド、フラグ、正規表現パターンが含まれ、それぞれをスラッシュ(/)などの区切り文字で分けて記述します。

Linuxでsedコマンドを使うには、ターミナルやSSHクライアント、またはHostingerのブラウザターミナルなどのコマンドラインアプリケーションを開きます。パターンを検索して置換するには、sサブコマンドを使用します。一方、dサブコマンドは行や文字列を削除するために使われます。

Linuxのsedコマンドは、ログの分析、マークアップタグの修正、複数ファイルの一括処理にも活用できます。さらに、正規表現の後方参照をサポートしており、スクリプトファイルを使って複数のコマンドを一度に実行することも可能です。

Linuxのsedコマンドに関するよくある質問

このセクションでは、sedコマンドに関するよくある質問にお答えします。

sedはgrepとどう違いますか?

sedとgrepはどちらもLinuxで使われるテキスト処理ツールです。ただし、grepには置換のようなテキスト変換や行の操作コマンドはありません。grepは主に、大きなファイル内で特定のテキストパターンを検索し、その結果を出力するために使われます。

sedはBashスクリプトでどのように使われますか?

Bashスクリプト内でのsedコマンドの主な用途は3つあります。標準出力への出力、テキストの削除、特定の文字列の置換です。どの行に処理を適用するかは、指定されたアドレス範囲によって決まります。

sedコマンドで変数を呼び出すには?

変数とは、数値・文字・ファイル名・デバイス名などの値を割り当てることのできる文字列で、sedコマンドに追加することで可読性が向上します。シェルは変数を自動的に展開します。例えば、置換対象の文字列にスラッシュ(/)が含まれる場合は、区切り文字としてパイプ(|)など別の記号を使用すると便利です。

sedコマンドとawkコマンドの違いは何ですか?

sedコマンドは、置換・削除・挿入といった基本的なテキスト編集を行うためのツールです。一方で、awkはデータの抽出、テキストの加工、数値計算など、より複雑な処理に適しています。また、 if/elsedo/whileといったプログラミング構文もサポートしており、簡易的なスクリプト言語としても活用できます。

Author
著者

Yukako Washisaka

こんにちは、Yukaです。バイリンガルの翻訳者として15年以上活動しています。アメリカではグラフィックデザインを学び、そこから翻訳の道に進みました。言葉を通じて文化と人をつなぐことにやりがいを感じていて、「伝わる」翻訳を大切にしています。 プライベートでは、家族とドライブに出かけたり、美しい景色を写真に収めたり、愛犬のトイプードルとのんびりお散歩するのが好きです。 このプロジェクトに関われることをうれしく思っています。私の翻訳が少しでもお役に立てれば光栄です。