Linux

sed コマンドの基本形式

投稿日:2021年9月6日 更新日:

1. sed コマンドの形式

sed コマンドは、

  1. ファイルの内容を受け取り、
  2. 何らかの加工を行い、
  3. その結果を出力する

という処理を実行するコマンドです。

この sed コマンドの基本的な使い方を説明します。

まず、sed の基本的なコマンドの形式は以下です。

$ sed 'sedのコマンド' ファイル名1 ファイル名2 ...
  • 「sedのコマンド」というのは、sed が持っているコマンドで、いろいろなものがあります。※ この部分は、実際は複数のリストを指定できるのですが、本記事では 1つだけしか指定しません。

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

  1. ファイル名1、ファイル名2、… のファイルをこの順番で読み込む
  2. 読み込んだファイルに対して、sedのコマンド(複数あり)を順番に適用する。
  3. その結果を出力する

2. これを踏まえて、簡単なコマンド例を紹介します。

(1) 読み込んだファイルの頭から30行を表示する

$ sed '5q' file1, file2
  • 5:行番号
  • q:指定された行で処理を終了するコマンド
  • file1 file2:2つのファイルをこの順番で読み込む。読み込んでしまえば、それが入力のまとまりとなり、file1 とか file2 とかは関係なくなる。

こんな感じで、「行の指定」+「コマンド」を与えています。

(2) 指定した行以外を表示する

$ sed '5d' file1, file2
  • 5:行番号
  • d:指定された行は表示させないコマンド(削除する)
  • file1 file2 :2つのファイルをこの順番で読み込む。読み込んでしまえば、それが入力のまとまりとなり、file1 とか file2 とかは関係なくなる。

(3) 指定した行だけを表示する

$ sed -n '5p' file1, file2
  • 5:行番号
  • p:指定された行を出力するコマンド
  • -n:指定された行以外は出力しない
  • file1 file2:2つのファイルをこの順番で読み込む。読み込んでしまえば、それが入力のまとまりとなり、file1 とか file2 とかは関係なくなる。

(4) 指定した範囲の行だけを表示する

$ sed -n '20,30p' file1, file2
  • 20,30:20行目から30行目の範囲を指定している。
  • あとは (3) と同様

先程まで「行番号」を指定していたところで、このように「行の範囲」を指定することもできます。

(5) 指定したパターンに合致した行だけを表示する

$ sed -n '/foo/p' file1, file2
  • /foobar/:スラッシュで囲まれた部分がパターンです。(3) で「行番号」で指定していたのを、「パターン」での指定に変えただけです。

(6) パターン1 に合致する行から、パターン2 に合致する行までの範囲だけを表示する

$ sed -n '/foo/,/bar/p' file1, file2
  • /foo/,/bar/:(4) で「20,30」と指定していたところを、「/パターン1/, /パターン2/」に変えただけです。

(7) foo の部分を bar に置換する

$ sed 's/foo/bar/g' file1, file2
  • s/foo/bar/g:”foo” という部分があったら、”bar” に置換します。最後に g を指定すると、1行の中に複数回 foo があった場合でも全て置換してくれます。これも1つのコマンドです。

3. おわりに

本記事では、基本的なコマンド実行例を紹介しました。

sed コマンドはいろいろなことができすぎて、引数の指定の仕方に一貫性がないように思え、引数の指定方法を記憶する妨げになりがちです。

しかし、本記事で紹介したコマンド実行例のどれもが、

$ sed 'sedのコマンド' ファイル名1 ファイル名2 ...

という形式に従っていることが分かります。

具体的には、「d」「q」「p」「s/pattern1/pattern2/」という「sed のコマンド」を紹介しました。

この「基本的な形式」だけ覚えておけば、sed コマンドがより使いやすくなると思います。

参考

📂-Linux

執筆者:labo


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

CentOS

CentOS Stream release 8 で「Configuration: OptionBinding with id “failovermethod” does not exist」というエラーが表示される

CentOS Stream release 8 で「Configuration: OptionBinding with id “failovermethod” does not exist」というエラーが表示される場合の対応についてです。

Linux

umask によって適用されるパーミッションの確認ページを作成しました

Linux (や Mac) では、ファイルやディレクトリに「パーミッション」を設定することでアクセスを制限します。 パーミッションは、「所有者」「所有グループ」「その他」の3者に対して、 ファイルなら …

CentOS

CentOS 6 での yum update エラーに対応しました

問題 先日、CentOS 6.9 で yum update したところ、以下のエラーが発生しました。 https://ca.mirror.babylon.network/remi/enterprise …

Linux

Ubuntu 18.04 (WSL) で curl がインストールエラーになったので対応しました

Ubuntu 18.04 LTS (WSL) の環境で curl コマンドをインストールしようとしたところ、エラーになりました。 この時の対応方法を説明します。 目次1. 状況2. 対応手順参考 1. …

Linux

Ubuntu ではユーザー名に大文字が使えません(デフォルトでは)

Ubuntu で ユーザーを追加するには adduser というコマンドを使います。 例えば、”foo” という名前のユーザーを追加するには、以下のコマンドになります。 $ a …