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

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

関連記事

Google App Engine

Ubuntu 18.04 (WSL) に、Google Cloud SDK をインストールする

Ubuntu 18.04 (WSL) に、Google Cloud SDK をインストールする手順を紹介します。

Linux

コマンドラインからメールを送信する方法

Linux (や Mac) のターミナルエミュレータ上からメールを送信するコマンドを紹介します。 目次1. sendmail2. mail3. telnet4. おわりに 1. sendmail se …

CentOS

CentOS 8 で Snap から certbot パッケージをインストールする

CentOS 8 で Snap から certbot パッケージをインストールする方法について説明します。

Linux

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

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

Linux

【Linux】 CentOS のマニュアル

CentOS は、RHEL (Red Hat Enterprise Linux)のソースコードから商標や商用パッケージ等を除去してリビルドした RHELクローンです。 マニュアルを見る場合は、RHEL …