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関数の分析

推薦する

Vue3+TypeScriptはaxiosをカプセル化し、リクエスト呼び出しを実装します

まさか、2021年になってもTypeScriptについて聞いたことがない人がいるなんて?プロジェクト...

MySQL データベース内の数十億のデータを素早くクリーンアップする方法

今日、ディスクアラーム例外を受け取りました。50G ディスクが爆発しました。分析と解決のプロセスは次...

Puppeteer を使用して Linux (CentOS) で Web ページのスクリーンショット機能を実装する

Linux に puppeteer をインストールするときに、次の問題が発生する可能性があります。こ...

docker を使用して crownblog プロジェクトを Alibaba Cloud にデプロイする方法

フロントエンドプロジェクトのパッケージ化.env.productionを見つけて、自分のIPまたはド...

MySQL インデックスの長所と短所、およびインデックス作成のガイドライン

1. インデックスを作成する理由(メリット)インデックスを作成するとシステムのパフォーマンスが大幅に...

加算、減算、乗算、除算の機能を実現するには、HTML に 2 つの数値を入力します。

1. parseFloat() 関数Web ページ上に簡単な計算機を作成し、テキスト ボックスに ...

Ubuntu で nvidia グラフィック ドライバーをインストールする (簡単なインストール方法)

Ubuntu で nvidia グラフィック カード ドライバーをインストールします。同じ方法で ...

ウェブデザイナー職の面接でよくある質問と回答

1. ASP.NET Web アプリケーションのテンプレートとは何ですか? それらの違いは何ですか?...

HTMLページがincludeを使用してphpファイルをインポートした後に余分な空白行があります

インターネットで見つけた方法は効果的ですinclude によって導入されたフッター ファイルとヘッダ...

Linux での MySQL 5.7.18 バイナリ パッケージのインストール チュートリアル (デフォルトの構成ファイル my_default.cnf なし)

現在、MySQL を学習中です。私は完全な初心者で、Linux についてはあまり知りません。今後の作...

CSS の Display、Visibility、Opacity、rgba、z-index: -1 の違い

ウェブページ上のいくつかの要素の非表示、透明、その他のプロパティを制御する必要があることがよくありま...

本をめくる効果を実現するネイティブJS

この記事では、ネイティブ JS で実装された本をめくる効果の図を紹介します。効果は次のとおりです。 ...

js で虫眼鏡効果を実現するためのアイデアとコード

この記事の例では、虫眼鏡効果を実現するためのjsの具体的なコードを参考までに共有しています。具体的な...

バックエンド管理システムを構築するためのvue-element-adminの実装手順

最近、カンファレンスの健康申告システムに取り組んでいたとき、バックエンドを構築する必要があり、vue...