sed コマンドを使用してファイルの特定の行を効率的に削除する方法

sed コマンドを使用してファイルの特定の行を効率的に削除する方法

序文

通常、ファイル内の特定の行を削除したい場合は、まずファイルを開き、削除する内容を見つけて、これらの行を選択して Delete キーを押して削除します。データの量が少ない場合は、これは問題になりません。しかし、ファイル内のデータ行数が多くなり、データが複雑になると、上記の方法をそのまま使用するとひどいことになります。そのため、本日の記事では、データが大きく複雑な場合でも、sed コマンドライン ツールを使用して、ファイル内の特定のコンテンツ行を効率的かつエレガントに削除する方法を説明します。

sed は Stream Editor の略称です。Linux の基本的なテキスト変換に使用されます。ファイル操作の重要なコマンドです。したがって、テキストの削除にも使用できます。

以下は、ほとんどの使用シナリオを網羅した sed コマンドの使用例です。これらの例により、最も単純なものから最も複雑なものまで sed コマンドを学習でき、ファイルの特定の行を簡単かつ効率的に削除できるようになります。

まず、デモ ファイル sed-demo.txt を準備します。

# cat sed-demo.txt

1 Linux オペレーティングシステム
2 Unix オペレーティングシステム
3 レッドヘル
4 レッドハット
5 フェドーラ
6 アーチリナックス
7 セントOS
8 デビアン
9. ウブントゥ
10 オープンSUSE

次に、sed コマンドを試してみましょう。

注: -i は、結果を端末に表示せずにファイル操作を直接実行することを意味します。これはデモンストレーションなので、ここでは -i オプションは使用しません。実際には -i オプションを使用してください。

1. 行を削除する

まず、最初の行や最後の行 (実際には N 行目) などの行を削除することから始めます。

行 N を削除するコマンドの形式は次のとおりです。

sed 'Nd' ファイル

最初の行を削除してみましょう:

# sed '1d' sed-demo.txt

削除後:
2 Unix オペレーティングシステム
3 レッドヘル
4 レッドハット
5 フェドーラ
6 アーチリナックス
7 セントOS
8 デビアン
9. ウブントゥ
10 オープンSUSE

簡単ですよね?ここでは詳しく説明しません。コマンド内の 1 を削除したい行に置き換えるだけです。

ここで問題になるのは、最後の行を表すのにどの数字が使用されるかということです。ここに皆さんへのヒントがあります。ドル記号 $ を使用して終了を表すことができるため、最後の行を削除するコマンドは次のように記述できます。

# sed '$d' sed-demo.txt

削除後:
1 Linux オペレーティングシステム
2 Unix オペレーティングシステム
3 レッドヘル
4 レッドハット
5 フェドーラ
6 アーチリナックス
7 セントOS
8 デビアン
9. ウブントゥ

2. いくつかの行を削除する

sed コマンドは連続した行または連続していない行を削除できます。

連続する行を削除します。たとえば、5 行目から 7 行目を削除します。

# sed '5,7d' sed-demo.txt

削除後:
1 Linux オペレーティングシステム
2 Unix オペレーティングシステム
3 レッドヘル
4 レッドハット
8 デビアン
9. ウブントゥ
10 オープンSUSE

連続していない行を削除します。たとえば、1 行目、5 行目、9 行目、最後の行を削除します。

# sed '1d;5d;9d;$d' sed-demo.txt

削除後:

2 Unix オペレーティングシステム
3 レッドヘル
4 レッドハット
6 アーチリナックス
7 セントOS
8 デビアン

さらに、論理 NOT! と組み合わせて使用​​することもできます。たとえば、行 3 から 6 を除くすべての行を削除します。

# sed '3,6!d' sed-demo.txt

削除後:

3 レッドヘル
4 レッドハット
5 フェドーラ
6 アーチリナックス

3. 空白行を削除する

sed はファイルの空白行の削除もサポートしています。コマンドは次のとおりです。

# sed '/^$/d' sed-demo.txt

削除後:

1 Linux オペレーティングシステム
2 Unix オペレーティングシステム
3 レッドヘル
4 レッドハット
5 フェドーラ
6 アーチリナックス
7 セントOS
8 デビアン
9. ウブントゥ
10 オープンSUSE

ヒント:ここで 2 つのスラッシュ // の間の表現は、テキストのマッチングの役割を果たします。正規表現の使用方法を参照してください。以下は学習を深めるためによく使われる方法です。

4. 特定の文字を含む行を削除する

サンプル ファイル内の System という単語を含む行を削除したいとします。/System/ を使用すると、System という文字列が出現するたびに一致するようになります。具体的なコマンドは次のとおりです。

# sed '/System/d' sed-demo.txt

削除後:

3 レッドヘル
4 レッドハット
5 フェドーラ
6 アーチリナックス
7 セントOS
8 デビアン
9. ウブントゥ
10 オープンSUSE

それだけでなく、次のコマンドのように論理条件を追加することもできます。

# sed '/System\|Linux/d' sed-demo.txt

削除後:

3 レッドヘル
4 レッドハット
5 フェドーラ
7 セントOS
8 デビアン
9. ウブントゥ
10 オープンSUSE

記号 \| は論理 OR を表します。上記のコマンドは、テキストに System または Linux を含むすべての行を削除することを意味します。

5. 特定の文字で始まる行を削除する

まず、より良いデモンストレーションのために別のサンプル ファイル sed-demo-1.txt を作成します。その内容は次のとおりです。

# cat sed-demo-1.txt

削除後:
Linux オペレーティングシステム
Unix オペレーティングシステム
レッドヘル
レッドハット
フェドーラ
デビアン
ウブントゥ
アーチリナックス - 1
2 – マンジャロ
3 4 5 6

前述の通り、$ 記号は終了を表すものとして理解できますが、開始を表す文字はあるのでしょうか?答えは「はい」です。ここでは、始まりを表すために ^ 記号を使用できます。

次に、特定の文字で始まる行を削除する場合、たとえば、R で始まる行を削除する場合は、次のコマンドを使用します。

# sed '/^R/d' sed-demo-1.txt

削除後:
Linux オペレーティングシステム
Unix オペレーティングシステム
フェドーラ
デビアン
ウブントゥ
アーチリナックス - 1
2 – マンジャロ
3 4 5 6

質問は、たとえば、R または F で始まる行を削除したい場合、コマンドを 2 回実行する必要があるかどうかです。もっと多い場合は、複数のコマンドを実行する必要があるのではないでしょうか?書き方は簡単です。これらの文字を角括弧 [] で囲んで書くだけです。

# sed '/^[RF]/d' sed-demo-1.txt

削除後:
Linux オペレーティングシステム
Unix オペレーティングシステム
デビアン
ウブントゥ
アーチリナックス - 1
2 – マンジャロ
3 4 5 6

上記のコマンドは、R または F で始まる行を削除するために使用されます。

6. 特定の文字で終わる行を削除する

特定の文字で終わる行を削除する場合にも同じ原理が適用されます。たとえば、m で終わる行を削除するには、次のようにします。

# sed '/m$/d' sed-demo.txt

削除後:
3 レッドヘル
4 レッドハット
5 フェドーラ
6 アーチリナックス
7 セントOS
8 デビアン
9. ウブントゥ
10 オープンSUSE

x または m で終わる行を削除するには、次のように記述します。

# sed '/[xm]$/d' sed-demo.txt

削除後:

3 レッドヘル
4 レッドハット
5 フェドーラ
7 セントOS
8 デビアン
9. ウブントゥ
10 オープンSUSE

7. 大文字で始まる行を削除する

ここで再び疑問が生じますが、大文字で始まる行をすべて削除したい場合はどうすればよいでしょうか?上記の方法によると、AからZまでの26文字すべてを[ ]に書き込む必要がありますか?実際、これを行う必要はなく、A と Z の間に - を追加するだけで済みます。

# sed '/^[A-Z]/d' sed-demo-1.txt

削除後:
デビアン
ウブントゥ
2 – マンジャロ
3 4 5 6

あなたはこれを読んだ後、他にも同様の使用法を思いつくほど賢いでしょう。次のコマンドを見て、思いつくものがあるかどうか確認してみてはいかがでしょうか。

8. アルファベット文字を含む行を削除する

# sed '/[A-Za-z]/d' sed-demo-1.txt

削除後:
3 4 5 6

9. 数字を含む行を削除します

# sed '/[0-9]/d' sed-demo-1.txt

削除後:

Linux オペレーティングシステム
Unix オペレーティングシステム
レッドヘル
レッドハット
フェドーラ
デビアン
ウブントゥ

さらに、この例では、^ と $ を追加して、3 つの違いをよりよく確認できます。

# sed '/^[0-9]/d' sed-demo-1.txt

削除後:

Linux オペレーティングシステム
Unix オペレーティングシステム
レッドヘル
レッドハット
フェドーラ
デビアン
ウブントゥ
アーチリナックス - 1

# sed '/[0-9]$/d' sed-demo-1.txt

削除後:

Linux オペレーティングシステム
Unix オペレーティングシステム
レッドヘル
レッドハット
フェドーラ
デビアン
ウブントゥ
2 – マンジャロ

10. その他

実際、削除したいファイルの内容はより具体的であり、単純な条件ではニーズを満たすことができないため、sed はより複雑な条件の組み合わせもサポートしています。たとえば、1 行目から 6 行目にある Linux という単語を削除する場合は、次のようにします。

# sed '1,6{/Linux/d;}' sed-demo.txt

削除後:
2 Unix オペレーティングシステム
3 レッドヘル
4 レッドハット
5 フェドーラ
7 セントOS
8 デビアン
9. ウブントゥ
10 オープンSUSE

System を含む行と次の行を削除します。

# sed '/System/{N;d;}' sed-demo.txt

削除後:
3 レッドヘル
4 レッドハット
5 フェドーラ
6 アーチリナックス
7 セントOS
8 デビアン
9. ウブントゥ
10 オープンSUSE

要約する

sed コマンドを使用してファイルの特定の行を効率的に削除する方法についての記事はこれで終わりです。 sed コマンドを使用してファイルの特定の行を削除する方法の詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。 今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Linux sed コマンドの詳細な説明 (推奨)
  • sedコマンドを使用して、キーワードがある行を検索し、その前の最初の文字を削除します。
  • Sedコマンドと正規表現メタ文字の使用方法の詳細な説明
  • sed コマンドを使用して文字列を置換する Linux チュートリアル
  • 一定期間から現在までのシステムログのsedコマンドを表示する
  • 1日1シェルコマンド Linuxテキストコンテンツ操作シリーズ - sedコマンド詳細説明
  • Linux での sed コマンドの使用
  • Linuxにおけるsedコマンドの使い方と注意点のまとめ
  • Linuxでよく使われるsedコマンド
  • Linuxでkv設定ファイルを変更するにはsedコマンドを使用します

<<:  Vue3 カプセル化された虫眼鏡コンポーネントのサンプルコード

>>:  例によるMySql CURRENT_TIMESTAMP関数の分析

推薦する

MySQL ストアドプロシージャの長所と短所の分析

MySQL バージョン 5.0 ではストアド プロシージャのサポートが開始されました。ストアド プロ...

Linux コマンドを素早く習得する 4 つの方法

Linux マスターになりたいなら、いくつかの Linux コマンドを習得することが不可欠です。 L...

nodejsとyarnをインストールし、Taobaoソースプロセスレコードを構成する

目次1. nodejsをダウンロードする2. ダブルクリックしてインストール3. グローバル npm...

MySQL 最適化のケーススタディ

1. 背景Youzan の各 OLTP データベース インスタンスには、実行時間が特定のしきい値を超...

12個のJavascriptテーブルコントロール(DataGrid)が整理されています

DataGrid コントロールの DataSource プロパティがデザイン時に設定されている場合、...

トークン生成と検証を実装するミニプログラム

目次プロセスデモミニプログラムバックエンドインターフェースプロセス各リクエストインターフェースは検証...

Vueがsweetalert2プロンプトコンポーネントを統合する際の問題についてお話ししましょう

目次1. プロジェクト統合1. CDNインポート方法: 2. 箱の梱包を確認する3. 迅速な箱詰め4...

HTML と CSS の基礎 (必読)

(1) HTML: ハイパーテキストマークアップ言語。主に「ヘッダー」と「ボディ」の2つの部分で構...

MySQL ステートメントの実行順序と書き込み順序の例の分析

選択ステートメントの完全な構文は次のとおりです。 選択 DISTINCT <選択リスト>...

シェルスクリプトは、Docker の半自動コンパイル、パッケージ化、およびリリースアプリケーション操作を構築します。

Docker 公開方法は、DevOps (送信、コンパイル、パッケージ化、リリースなどの一連のイベ...

データ URI スキームを使用して Web ページに画像を埋め込む方法の紹介

データ URI スキームを使用すると、HTML、CSS、Javascript などで使用できるインラ...

MySQLのINサブクエリによってインデックスが使用できなくなる問題を解決する

今日は、MySQL IN サブクエリの最適化に関するケーススタディを見ました。最初は少し懐疑的でした...

Vue はコンポーネント間の通信をどのように実装しますか?

目次1. 父と息子のコミュニケーション1.1 親コンポーネント --> 子コンポーネント1.2...

Linux で rsync を使用する方法

目次1. はじめに2. インストール3. 基本的な使い方3.1、-rパラメータ3.2、-aパラメータ...