序文 通常、ファイル内の特定の行を削除したい場合は、まずファイルを開き、削除する内容を見つけて、これらの行を選択して 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 をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: Vue3 カプセル化された虫眼鏡コンポーネントのサンプルコード
>>: 例によるMySql CURRENT_TIMESTAMP関数の分析
まさか、2021年になってもTypeScriptについて聞いたことがない人がいるなんて?プロジェクト...
今日、ディスクアラーム例外を受け取りました。50G ディスクが爆発しました。分析と解決のプロセスは次...
Shutdown.batファイルには次の文があります "%CATALINA_HOME%&q...
Linux に puppeteer をインストールするときに、次の問題が発生する可能性があります。こ...
フロントエンドプロジェクトのパッケージ化.env.productionを見つけて、自分のIPまたはド...
1. インデックスを作成する理由(メリット)インデックスを作成するとシステムのパフォーマンスが大幅に...
1. parseFloat() 関数Web ページ上に簡単な計算機を作成し、テキスト ボックスに ...
Ubuntu で nvidia グラフィック カード ドライバーをインストールします。同じ方法で ...
1. ASP.NET Web アプリケーションのテンプレートとは何ですか? それらの違いは何ですか?...
インターネットで見つけた方法は効果的ですinclude によって導入されたフッター ファイルとヘッダ...
現在、MySQL を学習中です。私は完全な初心者で、Linux についてはあまり知りません。今後の作...
ウェブページ上のいくつかの要素の非表示、透明、その他のプロパティを制御する必要があることがよくありま...
この記事では、ネイティブ JS で実装された本をめくる効果の図を紹介します。効果は次のとおりです。 ...
この記事の例では、虫眼鏡効果を実現するためのjsの具体的なコードを参考までに共有しています。具体的な...
最近、カンファレンスの健康申告システムに取り組んでいたとき、バックエンドを構築する必要があり、vue...