Categories: linux

Linuxのsedコマンド徹底解説|置換・編集を自在に操るテキスト処理術

Linuxのコマンドの中でも、「sed(セド)」はテキストの置換や削除といった処理を得意とする強力なツールです。特に、ログファイルの編集や設定ファイルの一括変更、スクリプト内でのテキスト処理において大活躍します。
本記事では、sedの基本から応用まで、コマンドの使い方や構文、具体的な活用例までをわかりやすく解説します。これからsedを使いたい方はもちろん、すでに使っている方にも役立つ情報を丁寧にまとめています。


sedとは?概要と特徴

sedは「stream editor」の略で、テキストファイルを一行ずつ処理していくフィルター型のツールです。
ファイルの内容をその場で編集するのではなく、標準出力として結果を返すのが特徴です。もちろん、オプションによって直接ファイルを書き換えることも可能です。

sedの主な機能

  • テキストの置換
  • 行の削除・追加
  • 一致パターンの抽出
  • 一括編集処理の自動化(スクリプトとして)

sedは、正規表現を使って柔軟なパターンマッチングが可能な点でも非常に強力です。


基本的な使い方

まずは、もっともよく使う「文字列の置換」について基本構文を見てみましょう。

sed 's/検索文字列/置換文字列/' ファイル名

例:

sed 's/apple/orange/' fruits.txt

このコマンドは、fruits.txtの各行にある最初のappleという文字列をorangeに置き換えます。なお、元ファイル自体は変更されません。

全置換を行うには「g」オプションをつける

sed 's/apple/orange/g' fruits.txt

このように、各行に出現するすべてのappleorangeに置換します。


ファイルを直接編集するには

-iオプションを使うことで、ファイルの内容を直接書き換えることができます。

sed -i 's/old/new/g' filename.txt

バックアップを取りたい場合は以下のようにします。

sed -i.bak 's/old/new/g' filename.txt

これにより、元のファイルはfilename.txt.bakとして保存されます。


特定の行だけを編集する

sedでは行番号を指定することで、対象の行だけに処理を行うことが可能です。

sed '3s/foo/bar/' sample.txt

これは3行目のfoobarに置き換える例です。

範囲指定も可能です:

sed '2,5s/dog/cat/' animals.txt

2行目から5行目までのdogcatに置き換えます。


行の削除をする

特定の行を削除するにはdコマンドを使用します。

sed '2d' file.txt

これは2行目を削除します。

複数行の削除もできます:

sed '2,4d' file.txt

2行目から4行目を削除します。

特定のキーワードを含む行を削除するには、次のように書きます。

sed '/error/d' log.txt

これはlog.txt内の「error」という文字列を含む行をすべて削除します。


行の挿入と追加

テキストの前後に行を追加することも可能です。

前に挿入(insert)

sed '2i\This is inserted line' file.txt

2行目の前に「This is inserted line」という行を追加します。

後に追加(append)

sed '2a\This is appended line' file.txt

2行目の後に「This is appended line」という行を追加します。


複数の置換を一括で行う方法

1つのsedコマンドで複数の処理を同時に行うには、「-e」オプションを使います。

sed -e 's/apple/orange/g' -e 's/banana/mango/g' fruits.txt

これにより、appleorangeに、bananamangoに一括で置換されます。

または、セミコロン(;)で連結してもOKです。

sed 's/apple/orange/g; s/banana/mango/g' fruits.txt

正規表現を使った高度な検索と置換

sedでは正規表現を活用することで、より柔軟なパターン指定が可能です。

数字のみの行を置換

sed -E 's/^[0-9]+$/<NUM>/' data.txt

この例では、数字だけで構成された行をすべて<NUM>に置き換えます。

先頭文字を削除

sed 's/^.\{1\}//' file.txt

各行の先頭1文字を削除します。


スクリプトでの活用例

sedはシェルスクリプトに組み込むことで自動化に非常に便利です。

#!/bin/bash

for file in *.log; do
sed -i 's/error/ERROR/g' "$file"
done

このスクリプトは、カレントディレクトリ内のすべての.logファイルの中でerrorERRORに置換します。


sedの注意点

  • -iオプションを使うと元ファイルが上書きされるので注意が必要です。バックアップを取る習慣をつけましょう。
  • 改行コードや特殊文字を扱う場合は、エスケープが必要になることがあります。
  • Mac環境では、-iの後に空白を入れずにバックアップ拡張子を指定する必要があります(例:-i '')。

まとめ

sedは、一見とっつきにくいかもしれませんが、習得すれば非常に強力なテキスト処理ツールです。
日常のちょっとした置換から、ログファイルの整形、大規模な一括編集まで幅広く活躍します。
慣れるまでは出力結果を標準出力で確認しながら、少しずつコマンドのバリエーションに挑戦してみてください。

あなたのLinuxスキルをワンランク上に押し上げてくれるはずです。

upandup

Web制作の記事を中心に、暮らし、ビジネスに役立つ情報を発信します。 アフィリエイトにも参加しています。よろしくお願いいたします。