(最終更新月:2023年4月)
✔このような方へ向けて書かれた記事となります
「sedコマンドって何?」
「sedコマンドでできることを詳しく知りたい」
「sedコマンドの実例を教えて」
✔当記事を通じてお伝えすること
- sedコマンドの基本
- sedコマンドのオプションや使い方
- sedコマンドの実例
当記事では、sedコマンドについて、その基本はもちろん、オプションや使い方まで丁寧に解説していきます。
ぜひ最後までご覧ください。
sedコマンドの基礎知識3選
sedコマンドの基礎知識をご覧ください。
後述されている使い方などを理解する際にも、役立ちます。
- sedコマンドとは
- sedコマンドの利点
- なぜsedコマンドを学ぶべきか?
sedコマンドとは
sedコマンドは、UNIXおよびLinux環境で使用される、ストリームエディタ(Stream EDitor)の略称で、テキストファイルを編集するために使われます。
特に大量のデータや複数のファイルを処理する際に効率的に作業ができます。
sedコマンドの利点
sedコマンドは以下のような利点があります。
- 大規模なテキストファイルも高速に処理できる
- 置換、削除、挿入などの様々なテキスト編集操作が可能
- 正規表現を用いた複雑な検索や置換が可能
- スクリプトを使って自動化しやすい
なぜsedコマンドを学ぶべきか?
sedコマンドを学ぶことで、効率的にテキストデータを処理できるようになります。
また、ログファイルの解析やデータ整形などの作業が容易になり、より高度なテキスト処理スキルを身につけられるのです。
sedコマンドのインストールと環境設定
sedコマンドのインストールと環境設定をご覧ください。
まずは準備を整えましょう。
- インストール方法
- 環境設定と初期設定
インストール方法
LinuxやMac OSでは、通常は既にインストールされています。
Windowsユーザーは、Windows Subsystem for Linux (WSL) をインストールして使用できます。
WSLとは、無料でインストールできるWindows内でLinuxを使える環境のこと。
環境設定と初期設定
特別な環境設定や初期設定は不要です。
ただし、sedコマンドが正常に動作するか確認するために、以下のコマンドを実行してみましょう。
$ echo "Hello, World!" | sed 's/World/Everyone/'
Hello, Everyone!
このとおり “Hello, Everyone!” と出力されれば、正常に動作しています。
sedコマンドの書き方
sedコマンドの書き方を見ていきましょう。
基本的な書き方と主なオプションを紹介します。
- 基本的な構文の解説
- 命令の書き方
- オプションの一覧
基本的な構文の解説
sedコマンドの基本構文は以下の通りです。
sed [オプション] ‘命令’ [入力ファイル]
命令には、置換、削除、挿入などの編集操作を指定します。
入力ファイルが指定されない場合、標準入力から読み込みます。
命令の書き方
命令について、以下の表にまとめました。
参考にして、必要な命令を書けるようになりましょう。
説明 | 構文 |
---|---|
文字列の置換 | s/検索パターン/置換パターン/[フラグ] |
行の削除 | /検索パターン/d |
行の挿入 | /検索パターン/i\挿入テキスト |
行の追加 | /検索パターン/a\追加テキスト |
行の変更 | /検索パターン/c\変更テキスト |
行のプリント | /検索パターン/p |
行のプリント抑制 | /検索パターン/n |
行のプリント・次行読込 | /検索パターン/N |
ホールドバッファへのコピー | /検索パターン/h |
ホールドバッファへの追加 | /検索パターン/H |
ホールドバッファの内容を パターンスペースにコピー | /検索パターン/g |
ホールドバッファの内容を パターンスペースに追加 | /検索パターン/G |
パターンスペースの内容を ホールドバッファに交換 | /検索パターン/x |
パターンスペースの内容を 削除して次行読込 | /検索パターン/D |
ブランチ | /検索パターン/b[ラベル] |
テストとブランチ | /検索パターン/t[ラベル] |
ラベル | :ラベル |
次のコマンドにスキップ | # |
行の表示(制御文字を可視化) | /検索パターン/l |
パターンスペースの内容を 削除して終了 | /検索パターン/q |
オプションの一覧
オプション名 | 説明 | 例 |
---|---|---|
-e | 複数のスクリプトを指定する場合に使用 | sed -e ‘s/foo/bar/’ -e ‘s/baz/qux/’ |
-f | スクリプトファイルを指定して実行 | sed -f script.sed input.txt |
-i | 編集結果を直接ファイルに上書き | sed -i ‘s/foo/bar/’ input.txt |
-I | 拡張子を指定して、バックアップを作成しながら編集 | sed -i.bak ‘s/foo/bar/’ input.txt |
-n | デフォルトで出力を抑制し、pオプションで指定した行のみ表示 | sed -n ‘s/foo/bar/p’ input.txt |
-r | 拡張正規表現を使用 | sed -r ‘s/(foo |
-E | -rオプションと同様、拡張正規表現を使用 | sed -E ‘s/(foo |
-s | 複数のファイルを入力として受け取り、それぞれに対して処理 | sed -s ‘s/foo/bar/’ file1.txt file2.txt |
-u | 出力をバッファリングせず、アンバッファードモードで実行 | sed -u ‘s/foo/bar/’ input.txt |
-z | データを行単位ではなく、NULL区切りで処理 | sed -z ‘s/foo/bar/’ input.txt |
sedコマンドの基本操作
sedコマンドの基本操作をもう少し詳しく見ていきましょう。
- 文字列の置換
- 行の削除
- 行の挿入と追加
- 複数の命令を一度に実行
こちらでは「itc.txt」という以下のテキストファイルを使います。
baseball
soccer
rugby
文字列の置換
以下の例では、ファイル内の “soccer” を “football” に置換します。
$ sed 's/soccer/football/' itc.txt
baseball
football
rugby
行の削除
以下の例では、ファイル内の “baseball” を含む行を削除します。
$ sed '/baseball/d' itc.txt
soccer
rugby
行の挿入と追加
以下の例では、ファイル内の “soccer” を含む行の前に “basketball” を挿入します。
$ sed '/soccer/i\basketball' itc.txt
baseball
basketball
soccer
rugby
また、”soccer” を含む行の後に “basketball” を追加します。
$ sed '/soccer/a\basketball' itc.txt
baseball
soccer
basketball
rugby
複数の命令を一度に実行
以下の例では、”baseball” を “swimming” に置換し、”rugby” を含む行を削除します。
$ sed -e 's/baseball/swimming/' -e '/rugby/d' itc.txt
swimming
soccer
正規表現との組み合わせ
正規表現と組み合わせることもできます。
詳しく見ていきましょう。
- 正規表現の基本
- sedコマンドでの正規表現の使用方法
正規表現の基本
正規表現は、文字列のパターンを表現するための特殊な記法です。例えば、以下の正規表現は数字を表します。
[0-9]
sedコマンドでの正規表現の使用方法
以下の例では、連続する数字を “NUM” に置換します。
sed 's/[0-9]\+/NUM/' itc.txt
実践的な例と応用
こちらでは、実践で使える方法をお伝えします。
- ファイルの一括置換
- コマンドの連携
- スクリプトファイルを利用した処理
ファイルの一括置換
以下の例では、複数のファイル内の “apple” を “orange” に置換します。
sed -i 's/apple/orange/' file1.txt file2.txt file3.txt
コマンドの連携
以下の例では、grepで “apple” を含む行を抽出し、その後 sedで “apple” を “orange” に置換します。
grep 'apple' input.txt | sed 's/apple/orange/'
スクリプトファイルを利用した処理
以下の例では、スクリプトファイル(script.sed)を利用して、一連の処理を実行します。
sed -f script.sed input.txt
よくあるエラーと対処法
よくあるエラーについてご紹介します。
エラーが起こる前に知っておけば、回避で切る確率が上がります。
- エラーメッセージの意味
- エラーの原因と解決策
エラーメッセージの意味
sedコマンドでエラーが発生した場合、エラーメッセージが表示されます。
これらのメッセージは、問題の原因や解決策を示しています。
エラーの原因と解決策
- 構文エラー:命令や正規表現の構文が正しくない場合に発生するもので、構文を見直し、修正が必要
- ファイルが見つからない:指定したファイルが存在しないか、パスが間違っている場合に発生するので、ファイル名やパスを確認して修正する
- 権限エラー:ファイルへのアクセス権限がない場合に発生しますので、権限を確認し、必要に応じて変更する
今後の学習
もっと詳しく学習したいと考えているのであれば、以下のような選択肢があります。
- 他のテキスト処理コマンド
- より高度な学習リソース
他のテキスト処理コマンド
sedコマンド以外にも、UNIX/Linuxで使用できるテキスト処理コマンドがあります。
例えば以下のようなものです。
- awkコマンド
- grepコマンド
- sortコマンド
これらのコマンドも学ぶことで、より効率的なテキスト処理が可能になります。
より高度な学習リソース
sedコマンドの応用や高度な利用方法を学ぶためには、以下のリソースが役立ちます。
- 公式ドキュメント(GNU sedやBSD sed)
- オンラインコミュニティ(Stack OverflowやReddit)
- オンラインチュートリアルや書籍
まとめ:sedコマンドでテキストを操作しよう
当記事の内容をまとめます。
- sedコマンドは高速処理が可能なテキスト操作コマンド
- sedコマンドでは命令を覚えなければならない
- sedコマンドは文字列だけでなくファイルからも読み取れる
sedコマンドは、高速で処理が可能なテキスト操作用のコマンドです。
命令を覚えるのが大変ですが、一度覚えると作業効率が大きく向上します。
当記事の命令一覧をご覧いただきつつ、少しずつでも使える幅を広げていけば、作業スピードが上がることは間違いないでしょう。