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

推薦する

露滴アニメーション効果を実装するための Three.js サンプル コード

序文みなさんこんにちは。CSS ウィザードの alphardex です。この記事では、three.j...

Vue プロジェクトは左スワイプ削除機能を実装します (完全なコード)

成果を達成するコードは次のとおりですhtml <テンプレート> <div> ...

この記事ではJavaScriptの基本であるディープコピーとシャローコピーについて説明します。

目次浅いコピーディープコピー補充する要約するコピー(クローン、複製などとも呼ばれる)ですが、ディープ...

あるテーブルのデータの列を別のテーブルの列にコピーするMySQLメソッド

mysql 1 つのテーブル列を別のテーブルにコピーする場合によっては、フィールドから別の新しいフィ...

React Router 5.1.0 はページジャンプナビゲーションを実装するために useHistory を使用します

目次1. withRouterコンポーネントを使用する2. ルートタグを使用するReactRoute...

デジタル時計効果を実現するJavaScript

この記事の例では、JavaScriptでデジタル時計効果を実装するための具体的なコードを参考までに共...

HTML フレーム、Iframe、フレームセットの違い

10.4.1 フレームセットとフレームの違い まず、フレームセットとフレームの違いについて説明します...

Apache SkyWalking アラーム設定ガイドの詳細な説明

アパッチ スカイウォーキングApache SkyWalking は、マイクロサービス、クラウド ネイ...

SQL ファジー クエリ レポート: ORA-00909: パラメータの数が無効です。解決策

あいまいクエリにOracleデータベースを使用する場合、コンソール エラーは次の図に表示されます。理...

Vueリクエストインターセプターの設定方法の詳しい説明

以下の手順に従ってください1. request.jsコンテンツ: http リクエスト インターセプ...

CSS3+JS による虫眼鏡モードの完璧な実装の詳細説明

約 1 年前、私は「虫眼鏡効果を模倣するいくつかの方法の原理の分析」という記事を書きました。当時、自...

Apache の一般的な仮想ホスト設定方法の分析

1. Apacheサーバーのインストールと設定yum インストール httpd -y systemc...

HTML における li タグの水平配置の例

ほとんどのナビゲーション バーは、下の図に示すように水平に配置されていますが、これはどのように実現さ...

誰もが知っておくべきウェブサイトのユーザビリティに関する 10 のヒント

これ以上時間を無駄にせず、早速本題に入りましょう。 1. ロゴに代替テキストを追加するこれには 2 ...

node.jsミドルウェアの種類についての簡単な説明

目次概要1. アプリケーションレベルのミドルウェア2. 組み込みミドルウェア3. サードパーティミド...