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

推薦する

JavaScriptはボタンをクリックして4桁のランダムな検証コードを生成します

この記事の例では、ボタンをクリックすることで4桁のランダムな検証コードを生成するjsの具体的なコード...

Vue 3.0 カスタムディレクティブの使い方

目次1. カスタム指示1. グローバルカスタム指示を登録する2. グローバルカスタム指示を使用する3...

Docker インストール rocketMQ チュートリアル (最も詳細)

RocketMQ は、Alibaba が設計した分散型のキューベースのメッセージング ミドルウェア...

HTML特殊文字の徹底分析

HTML徹底解析(14)特殊文字 ■ よく使われる特殊文字 HTMLタグを知っていれば、特殊文字の使...

shtmlとhtmlの違い

Shtml と asp は似ています。shtml という名前のファイルでは、asp の命令と同様に、...

Alibaba Cloud MySQL スペースをクリーンアップする方法

今日、Alibaba Cloudからディスク警告通知を受け取りました。確認したところ、100Gのスペ...

Linux での rpm、yum、ソースコードの 3 つのインストール方法の詳細な紹介

第1章 ソースコードのインストールRPM パッケージは特定のシステムとプラットフォームに応じて指定さ...

JavaScriptのアロー関数の特徴と通常の関数との違い

目次1. 矢印関数の使用1. 通常関数から矢印関数へ2. 中括弧を省略してリターンする3. 括弧を省...

JSでユーザーを追跡する方法

目次1. 同期AJAX 2. 非同期AJAX 3. ユーザーのクリックを追跡する4. リバウンドトラ...

親コンテナの CSS 均等分割 (完全三分の一) の実装

親コンテナの幅は固定されています。子要素が親の幅を均等に分割するには、どのような方法がありますか?コ...

CSS 画面サイズ適応実装例

CSS 画面サイズの適応を実現するには、まず CSS3 @media メディア クエリを導入する必要...

sshとは何ですか?使い方は?どのような誤解があるのでしょうか?

目次序文SSHとは何かssh は何に使用されますか? sshの使い方ssh 再修正要約する序文ssh...

表のセルの内容が超過した場合に省略記号効果を表示する(実装コード)

例示するフロントエンド開発では、セルの幅を制限し、コンテンツが制限を超える部分に省略記号を表示する必...

Vue3 ページ、メニュー、ルートの使用

目次1. メニューをクリックしてジャンプ1. ページ名の統一2. 管理ページを追加3. ルートを追加...