Ex/vim ex-mode 和 sed 是完全不同的實用程式還是用於相同任務的兩個不同程序

Ex/vim ex-mode 和 sed 是完全不同的實用程式還是用於相同任務的兩個不同程序

據我所知,sed(流編輯器)是一種非互動式編輯器,對於腳本編寫和批次很有用。我還了解 ex 及其 vim 呼叫:ex 模式是用於非互動式文字處理的行編輯器。我的問題不是關於哪個更好或更有用的觀點,而是 ex/ex-mode 是否有任何預期的用例或優勢使其與 sed 區分開來。我問這個問題的原因是為了確定我是否因忽略前模式而忽略了 sed 而錯過了。提前致謝。

答案1

之間的一個主要區別前任sed是前者(至少在 Vim 實作中)將整個檔案讀取到緩衝並以此為基礎進行操作。而 sed 中的「s」代表串流媒體,即 sed 逐行讀取輸入文件,並即時輸出。因此,sed 可以輕鬆處理非常大的文件,而 ex / Vim 將需要作業系統的虛擬位址空間,並且讀寫速度要慢得多。

因此,使用 sed,如果您需要保留前幾行的上下文,則必須明確地將其與模式空間,或將其儲存在單一可用的保留空間。而在 ex / Vim 中,您可以導覽回上一行或使用跨越緩衝區中多行的正規表示式。而且,這裡不僅有一個保留空間,但是多個命名暫存器在 Vim 中(稱為命名緩衝區在前)。因此,如果單一儲存空間不夠,則必須從 sed 升級到awk(以保持串流媒體方面),或切換到 ex / Vim。

在實踐中

如果我已經在 Vim 中開啟了一個文件,我自然會使用前模式用於某些文字操作。:substitute是最常用的指令之一(至少對我來說)。許多 ex 指令都有對應的(通常是遞歸的)執行;根據任務(以及個人喜好/能力),您傾向於更頻繁地使用其中之一。

對於自動化任務,我更喜歡sed//awkPerl鏈;這裡的好處是,您可以從小處開始(使用 sed),一旦達到其功能的極限,您可以輕鬆地遷移到下一個工具,它更強大(但也更複雜和更大)。如果這是一項一次性自動化任務,並且我已經知道一個漂亮的巨集或 Vim 插件可以極大地簡化實現,我會考慮使用 Vim 作為非互動式命令列實用程序沉默的前模式。對於其他任務,由於依賴關係(Vim、插件、我的個人配置),這通常不是一個選項。

概括

您只需使用 sed 就可以做很多事情,而無需其他任何東西。如果您不是 Vim 用戶(特別是如果您使用其他編輯器,並且可以在那裡進行強大的文本處理),ex(模式)並不是那麼重要,但永遠不會太遠,因為無論如何,它的語法與 sed 緊密一致。

相關內容