Ich verstehe, dass sed (Stream-Editor) ein nicht interaktiver Editor ist, der für Skripting und Stapelverarbeitung nützlich ist. Ich verstehe auch, dass ex und sein vim-Aufruf: ex-mode Zeileneditoren für nicht interaktive Textverarbeitung sind. Meine Frage ist keine Meinung darüber, was besser oder nützlicher ist, sondern ob es einen beabsichtigten Anwendungsfall oder Vorteil für ex/ex-mode gibt, der es von sed unterscheidet. Der Grund meiner Frage ist, festzustellen, ob ich etwas verpasse, wenn ich ex-mode zugunsten von sed ignoriere. Vielen Dank im Voraus.
Antwort1
Ein wesentlicher Unterschied zwischenexUndsedist, dass ersteres (zumindest in der Vim-Implementierung) die gesamte Datei in einePufferund arbeitet darauf. Während das "s" in sed fürStreaming-Dienste, d. h. sed liest die Eingabedatei(en) zeilenweise und gibt sie unterwegs aus. Daher verarbeitet sed sehr große Dateien problemlos, während ex / Vim den virtuellen Adressraum Ihres Betriebssystems benötigt und beim Lesen und Schreiben erheblich langsamer ist.
Wenn Sie also mit sed einen Kontext aus vorherigen Zeilen beibehalten möchten, müssen Sie ihn explizit mit demMusterraumoder speichern Sie es in der einzigen verfügbarenLeertaste gedrückt halten. In ex / Vim hingegen können Sie zu einer vorherigen Zeile zurück navigieren oder reguläre Ausdrücke verwenden, die sich über mehrere Zeilen im Puffer erstrecken. Außerdem gibt es nicht nur eine einzigeLeertaste gedrückt halten, aber mehrereBenannte Registerin Vim (genanntBenannte Pufferin ex). Wenn also ein einzelner Speicherplatz nicht ausreicht, müssen Sie von sed aufawk(um den Streaming-Aspekt beizubehalten) oder wechseln Sie zu ex/Vim.
In der Praxis
Wenn ich bereits eine Datei in Vim geöffnet habe, verwende ich natürlichEx-Modusfür bestimmte Textmanipulationen. :substitute
ist einer der am häufigsten verwendeten Befehle (zumindest für mich). Viele Ex-Befehle haben eine entsprechende (oft rekursive)MakroImplementierung; je nach Aufgabe (und persönlichen Vorlieben/Fähigkeiten) neigt man dazu, das eine oder das andere häufiger zu verwenden.
Für Automatisierungsaufgaben bevorzuge ich die sed
/ awk
/ Perl
-Toolchain. Das Schöne daran ist, dass Sie klein anfangen können (mit sed) und wenn Sie die Grenzen seiner Fähigkeiten erreichen, können Sie ziemlich einfach zum nächsten Tool migrieren, das leistungsfähiger (aber auch komplexer und größer) ist. Wenn dies eine einmalige Automatisierungsaufgabe ist und ich bereits ein raffiniertes Makro oder Vim-Plugin kenne, das die Implementierung erheblich vereinfacht, ziehe ich die Verwendung von Vim als nicht-interaktives Befehlszeilenprogramm in Betracht.stiller Ex-Modus. Für andere Aufgaben ist dies aufgrund der Abhängigkeiten (zu Vim, dem Plugin, meiner persönlichen Konfiguration) normalerweise keine Option.
Zusammenfassung
Sie können eine Menge Dinge nur mit sed machen, und sonst nichts. Wenn Sie kein Vim-Benutzer sind (insbesondere wenn Sie denandereEditor und kann dort leistungsstarke Textverarbeitung durchführen), ex (Modus) ist nicht so wichtig, aber nie weit entfernt, da seine Syntax ohnehin eng an sed angelehnt ist.