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

推薦する

Windows での MySQL 5.7.20 のインストールと設定方法のグラフィック チュートリアル

参考までにWindowsにMySQLをインストールします。具体的な内容は次のとおりです。 1.まずM...

AngularJSにおける括弧の役割の詳細な説明

1. 括弧の役割1.1 角括弧 [ ]属性名が角括弧で囲まれている場合、右側には式の値が割り当てられ...

HTML でのアンカーポイントの使用_PowerNode Java アカデミー

ここで、アンカー ポイントを制御するいくつかの状況をまとめてみましょう。 1. 同じページ <...

MySQL ページングクエリ最適化テクニック

ページング クエリを使用するアプリケーションでは、LIMIT と OFFSET を含むクエリが非常に...

MySQLサーバのスレッド数を表示する方法の詳細な説明

この記事では、例を使用して、MySQL サーバーのスレッド数を表示する方法について説明します。ご参考...

MySQLの主キーとユニークキーの重複挿入の解決策の詳細な説明

目次解決: 1. 無視する2. 交換する3. 重複キーの更新についてデータを挿入するときに、重複した...

Mysql 文字列の傍受と指定された文字列内のデータの取得

序文: 正規表現のインターセプションに似た、MySql フィールドの文字列から特定の文字を抽出すると...

Linux アカウントのパスワードを変更する詳細な例

個人アカウントのパスワードを変更する一般ユーザーが個人アカウントのパスワードを変更する場合は、他のコ...

ElementUI ページネーション コンポーネントの使い方 Vue でのページネーション

ElementUIページングコンポーネントPagination in Vueの使用は参考になります。...

Vueはページキャッシュ機能を実装する

この記事の例では、ページキャッシュ機能を実装するためのVueの具体的なコードを参考までに共有していま...

非常に実用的なTomcat起動スクリプトの実装方法

序文セキュリティ上の理由から、会社が Linux サーバーへのすべてのログインにセキュリティ制限を課...

Dockerコンテナの入退出方法の詳細な説明

1 Dockerサービスを開始するまず、docker サービスを開始する方法を知っておく必要がありま...

MySQL テーブルにおける非主キー列オーバーフロー監視の詳細な説明

今日もまた罠に落ちてしまいました。 私は以前MySQLの主キーオーバーフローに遭遇したことがあり、そ...