sedコマンドで条件に合致した行を削除する方法

目次

スポンサードリンク

本記事では、sedコマンドで条件に合致した行を削除する方法を解説します。コマンドラインやシェルスクリプト内で使用することができるテクニックです。

sedコマンドとは

sedコマンドはテキストストリームを編集するための強力なコマンドラインツールです。行単位でテキストデータを処理し、文字列の置換、削除、追加など、様々な操作を行うことができます。

sedコマンドの基本的な構文は以下の通りです。入力ファイルの検索パターンに該当する行を削除した結果が出力ファイルに記録されます。ログファイルからエラー行のみを削除するなど、条件がシンプルな場合に使える方法です。

sed '/検索パターン/d' 入力ファイル > 出力ファイル

以下のようにパイプを使う方法もあります。catコマンドで標準出力に出力した内容をパイプでsedコマンドに渡しています。

cat 入力ファイル | sed '/検索パターン/d' 

パターンにマッチしたテキストを削除するサンプル

下記サンプルは ランダムな日付を記録したファイルから、198 という文字列を含む行を削除しています。

[root@hostname tmp]# cat data.txt
1       1981/09/27
2       1993/06/15
3       1971/06/28
4       1991/05/08
5       1983/12/17
6       1978/02/24
7       1970/01/16
8       1983/01/31
9       1972/03/20
10      1994/02/04
[root@hostname tmp]#
[root@hostname tmp]# cat data.txt | sed '/198/d'
2       1993/06/15
3       1971/06/28
4       1991/05/08
6       1978/02/24
7       1970/01/16
9       1972/03/20
10      1994/02/04

行番号を指定してテキストを削除するサンプル

下記サンプルでは行番号を指定して行を削除しています。最初の例は、5行目を削除しています。二つ目の例では、1行目から5行目までを削除しています。

[root@133-130-122-109 tmp]# cat data.txt | sed '5d'
1       1981/09/27
2       1993/06/15
3       1971/06/28
4       1991/05/08
6       1978/02/24
7       1970/01/16
8       1983/01/31
9       1972/03/20
10      1994/02/04
[root@133-130-122-109 tmp]#
[root@133-130-122-109 tmp]# cat data.txt | sed '1,5d'
6       1978/02/24
7       1970/01/16
8       1983/01/31
9       1972/03/20
10      1994/02/04


Linuxコマンドについて学べるおすすめ書籍
Linuxコマンドの知識は、プログラマにとって長く役立つ知識です。 私はこちらの書籍で一通り知識を抑えました。基本から丁寧に解説されています。

Linux教科書 図解でパッとわかる LPIC/LinuC
はじめてLPICを受ける方向け、手を動かしながらLinuxについて学びたい方におすすめ。30日間の無料体験もできる『Kindle Unlimited』でも読むことができます。

Linuxコマンドについて徹底的に学べるUdemy講座
もう絶対に忘れない Linux コマンド【Linux 100本ノック+名前の由来+丁寧な解説で、長期記憶に焼き付けろ!】 icon