Ex/vim ex-modeとsedは、まったく異なるユーティリティなのか、それとも同じタスクを実行する2つの異なるプログラムなのか

Ex/vim ex-modeとsedは、まったく異なるユーティリティなのか、それとも同じタスクを実行する2つの異なるプログラムなのか

sed (ストリーム エディター) は、スクリプト作成やバッチ処理に便利な非対話型エディターであることは理解しています。また、ex とその vim 呼び出し: ex-mode は、非対話型テキスト処理用の行エディターであることも理解しています。私の質問は、どちらが優れているか、より便利かという意見ではなく、ex/ex-mode には、sed とは異なる意図的な使用例や利点があるかどうかです。質問する理由は、ex-mode を無視して sed を選ぶことで、何か損をしているかどうか判断するためです。よろしくお願いします。

答え1

大きな違いはそしてsed前者は(少なくともVimの実装では)ファイル全体をバッファそしてそれに基づいて操作します。一方、sedの「s」はストリーミングつまり、sed は入力ファイルを 1 行ずつ読み取り、その場で出力します。したがって、sed は非常に大きなファイルを簡単に処理できますが、ex / Vim はオペレーティング システムの仮想アドレス空間を必要とし、読み取りと書き込みがかなり遅くなります。

したがって、sedでは、前の行のコンテキストを保持する必要がある場合は、明示的にそれを結合する必要があります。パターンスペース、または利用可能な単一のスペースを保持するex / Vimでは、前の行に戻ったり、バッファ内の複数行にまたがる正規表現を使用したりすることができます。また、スペースを保持する、しかし複数の名前付きレジスタVim(と呼ばれる)では名前付きバッファ例えば、単一のストレージスペースでは不十分な場合は、sedからawk(ストリーミングの側面を維持するため)、または ex / Vim に切り替えます。

実際には

すでにVimでファイルを開いている場合は、当然exモード特定のテキスト操作に使用します。:substituteこれは最も頻繁に使用するコマンドの 1 つです (少なくとも私にとっては)。多くの ex コマンドには対応する (多くの場合再帰的な)大きい実装; タスク (および個人の好み/能力) に応じて、どちらか一方をより頻繁に使用する傾向があります。

sed自動化タスクには、 / awk/ツールチェーンが適していますPerl。ここでのよい点は、小さなツール (sed を使用) から始めて、その機能の限界に達したら、より強力な (ただし、より複雑で大規模な) 次のツールに簡単に移行できることです。これが 1 回限りの自動化タスクであり、実装を大幅に簡素化する気の利いたマクロまたは Vim プラグインについて既に知っている場合は、Vim を非対話型のコマンドライン ユーティリティとして使用することを検討します。サイレントEXモード他のタスクの場合、依存関係(Vim、プラグイン、私の個人的な設定)があるため、これは通常オプションではありません。

まとめ

sedだけで、他のものなしで多くのことができます。Vimユーザーでない場合(特に他のエディタであり、強力なテキスト処理を実行できます)、ex (モード) はそれほど重要ではありませんが、その構文は sed と密接に連携しているため、決して重要ではありません。

関連情報