序文 通常、ファイル内の特定の行を削除したい場合は、まずファイルを開き、削除する内容を見つけて、これらの行を選択して 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関数の分析
参考までにWindowsにMySQLをインストールします。具体的な内容は次のとおりです。 1.まずM...
メディアデバイスタイプの使用法の詳細な説明: <!DOCTYPE html> <h...
効果画像: html: <div class='site_bar'>ホー...
1. 括弧の役割1.1 角括弧 [ ]属性名が角括弧で囲まれている場合、右側には式の値が割り当てられ...
ここで、アンカー ポイントを制御するいくつかの状況をまとめてみましょう。 1. 同じページ <...
ページング クエリを使用するアプリケーションでは、LIMIT と OFFSET を含むクエリが非常に...
この記事では、例を使用して、MySQL サーバーのスレッド数を表示する方法について説明します。ご参考...
目次解決: 1. 無視する2. 交換する3. 重複キーの更新についてデータを挿入するときに、重複した...
序文: 正規表現のインターセプションに似た、MySql フィールドの文字列から特定の文字を抽出すると...
個人アカウントのパスワードを変更する一般ユーザーが個人アカウントのパスワードを変更する場合は、他のコ...
ElementUIページングコンポーネントPagination in Vueの使用は参考になります。...
この記事の例では、ページキャッシュ機能を実装するためのVueの具体的なコードを参考までに共有していま...
序文セキュリティ上の理由から、会社が Linux サーバーへのすべてのログインにセキュリティ制限を課...
1 Dockerサービスを開始するまず、docker サービスを開始する方法を知っておく必要がありま...
今日もまた罠に落ちてしまいました。 私は以前MySQLの主キーオーバーフローに遭遇したことがあり、そ...