sedコマンドについて調べてみた

sedコマンドはLinuxでテキスト処理する際に有用なコマンドですよね。検索や置換、テキストの挿入・削除といった操作を手軽に実行できるのが魅力的です。

 

今回はsedについて、その魅力と使い方を紹介します。記事後半にはsedコマンド実践10と題して、ハンズオンを10パターン用意しました。

 

 

sedコマンドについて調べてみた

■sedコマンドとは

sedコマンドは、テキスト処理を行うための強力なユーティリティで、主にストリームエディタとして使用されます。sedは「stream editor」の略で、テキストファイルやパイプからの入力を処理し、標準出力に結果を出力します。主にテキストの検索、置換、挿入、削除などの操作を自動化するために用いられます。

 

sedコマンドの基本的な構文

sed [オプション]... {スクリプト} [入力ファイル]...

 

ここで、スクリプトはsedに実行させたい命令を含み、入力ファイルは処理対象のテキストファイルです。オプションを使用することで、動作をカスタマイズできます。

 

 

■sedコマンドの特徴と用途

 

  • テキストの検索と置換: sedは正規表現をサポートしており、パターンに一致するテキストの検索や置換を行うことができます。

  • スクリプトの実行: 複数のsedコマンドをスクリプトファイルに記述し、一度に実行することが可能です。

  • インプレース編集: -iオプションを使用すると、ファイルを直接編集し、元のファイルを変更することができます(一時ファイルを作成せずに)。

  • パイプラインとの組み合わせ: sedはパイプラインの一部として使用することができ、他のコマンドからの出力を加工したり、その出力を他のコマンドへ渡したりすることができます。

 

 

■sedコマンドの使い方

テキストファイル内の文字列を置換する基本的な例を紹介します。

 

sed 's/検索パターン/置換文字列/g' ファイル名

 

このコマンドは、指定したファイル内の「検索パターン」に一致する全てのテキストを「置換文字列」に置換します。[s]は「substitute」(置換)の略で、[g]は「global」(全体)の略です。gフラグは、行内のすべての一致する部分を置換することを指示します。

 

sedはその柔軟性と強力なテキスト処理能力により、シェルスクリプトや自動化スクリプトで広く使用されていますね。

 

 

■sedコマンドのユースケース

1. 文字列の検索と置換

最も一般的な使用例です。特定の文字列を検索し、それを別の文字列で置換します。この操作は、設定ファイルやプログラムのソースコードなど、任意のテキストファイルに対して行うことができます。

 

sed 's/oldstring/newstring/g' file.txt

 

2. ファイルから特定の行を削除

sedを使用して、特定のパターンに一致する行や、特定の行番号の行を削除することができます。

 

# パターンに一致する行を削除
sed '/pattern_to_delete/d' file.txt

# 特定の行番号の行を削除(例:2行目)
sed '2d' file.txt

 

3. ファイル内のテキストを抽出または置換して新しいファイルを作成

sedを使用して加工した結果を新しいファイルにリダイレクトすることができます。

 

sed 's/old/new/g' oldfile.txt > newfile.txt

 

 

sedコマンドハンズオン

sedコマンドに慣れるために、ハンズオンをこなしていきましょう。作業ディレクトリに次のテキストファイルを用意してください。

 

sample_text.txt

Hello, this is a sample text file.
This file contains multiple lines of text.
The purpose of this file is to demonstrate various sed command examples.
You will see how sed can be used to manipulate text files.
This includes searching for text, replacing text, and deleting lines.
We will also show how to insert and append text with sed.
Finally, you will learn how to modify files in-place with sed.
Thank you for trying out these sed command examples.
2024/01/03 by saito

 

iオプションを使用しない限り、元のファイルは変更されません。どこが変わったか知りたい方は、以下の一行目のコマンドを追加し別ファイルに出力、二行目のコマンドで差異を確認しましょう。

 

 > modified_sample_text.txt
diff sample_text.txt modified_sample_text.txt

 

 

■sedコマンド実践10

1. テキストの検索と置換

ファイル内の「text」を「TEXT」に置換します。

sed 's/text/TEXT/g' sample_text.txt

 

2. 特定の行のテキストを置換

3行目の内容を「This is the third line.」に置換します。[.]に関して、[.]は任意の単一文字にマッチし、[]は直前の文字が0回以上繰り返すことを意味しています。したがって、.*はその行の全ての文字にマッチするという意味です。

sed '3s/.*/This is the third line./' sample_text.txt

 

3. パターンに一致する行を削除

「sed」を含む行を全て削除します。[d]は「delete」の略で、指定されたパターンにマッチする行を削除するようsedに指示します。

sed '/sed/d' sample_text.txt

 

4. 行番号で特定の行を削除

5行目を削除します。

sed '5d' sample_text.txt

 

5. ファイルの末尾にテキストを追加

ファイルの最後に新しい行を追加します。[a]は「append」の略で、マッチした行の直後に新しいテキストを挿入するアクションを指示し、実際に新しい行を挿入するテキストはa\の直後に記述されます。

sed '$a\This is a new line at the end of the file.' sample_text.txt

 

6. ファイルの先頭にテキストを挿入

ファイルの最初に新しい行を挿入します。

sed '1i\This is a new line at the beginning of the file.' sample_text.txt

 

7. 特定のパターンに一致した後の行にテキストを挿入

「manipulate」を含む行の後に新しい行を挿入します。

sed '/manipulate/a\This line is inserted after the first match of "manipulate".' sample_text.txt

 

8. 特定の行を複数回繰り返し出力

4行目を3回繰り返して出力します。

sed '4{p;p;}' sample_text.txt

 

9. ファイル内のすべての行を番号付け

各行の先頭に行番号を付けて出力します。

sed '=' sample_text.txt | sed 'N;s/\n/ /'

 

10. 特定のパターンを含む行を大文字に変換

「text」を含む行全て大文字に変換します。

sed '/text/{
s//TEXT/g
}' sample_text.txt

 

 

まとめ

sedコマンドは検索や置換、テキストの挿入・削除といった操作を手軽に実行できる便利なコマンドです。しかし、コマンドに慣れていないと、期待通りの処理ができなかったり、間違った結果が返ってきたりします。ハンズオンを通して、実務で使えるようになっていきましょう。

 

 

参考リンク:sedマニュアル

 

↓ほかの協栄情報メンバーのLinuxについての記事を公開しています。ぜひ参考にしてみてください。
 

 
linuxでのプロセスの監視について(ito.d)

 
【初学者用】Linuxを体系的に学ぶ – Part.1(Y.TANAKA)

 
【SadServers】ブラウザでLinuxを触れるLinux学習サイトと教育コストの話(kioka)

 

 

Last modified: 2024-03-03

Author