Ich möchte Dateien bearbeiten, die in der Pipeline-Eingabe mit vim nicht interaktiv übergeben wurden, oder Dateien direkt bearbeiten (ähnlich wie sed
).
Einige Beispiele mit sed
:
$ sed -i'.bak' s/foo/test/g file # Edit file in-place.
$ cat file | sed s/foo/test/g # Parse file in pipeline.
Allerdings konnte ich in gelesen hier , dass:
sed
ist ein S tream ED itor, kein Datei-Editor. Nichtsdestotrotz neigen Menschen überall dazu, es für den Versuch, Dateien zu bearbeiten, zu missbrauchen. Es werden keine Dateien bearbeitet.
Zweitens sind einige Optionen wie In-Place-Bearbeitung ( -i
) portierbar.
Wie kann die gleiche Funktionalität in vim erreicht werden?
file
von Ihrer zweiten Kommandozeile löschen.Antworten:
Um eine Datei nicht interaktiv zu bearbeiten
ex
(vi
ist der visuelle Modus fürex
), können Sie+{command}
oder-c {command}
Parameter verwenden, mit denen Sie die vi-Befehle ausführen können, nachdem die erste Datei gelesen wurde.Dies
ex
ist ein Standard-Befehlszeileneditor (ähnlich demed
).Es sollte auch
vipe
(ein Vim-Befehlspipe-Editor) verwendet werden, der Teil desmoreutils
Pakets ist und es Ihnen ermöglicht, Ihren Editor in der Mitte einer Unix-Pipeline auszuführen und die Daten zu bearbeiten, die zwischen Programmen übertragen werden.Beispiele
Mit dieser Shell-Syntax können einfache Standardeingaben und -ausgaben mithilfe von Pipes erzielt werden:
Hier ist ein einfaches Beispiel, wie die Datei nach dem Ersetzen gedruckt wird:
Weitere Beispiele zum Bearbeiten von Dateien vor Ort:
Sie können auch verwenden,
-s {scriptin}
um die Befehle aus der Datei zu laden. Beispiel:oder über die E / A-Umleitung:
Überprüfen Sie die folgenden Beispiele, um eine Datei zu bearbeiten und die Änderungen in einer anderen zu speichern:
Weitere praktische Beispiele.
Reales Live-Beispiel aus der RPM- Spezifikation:
HTML-Tags extrahieren :
XML-Tags entfernen :
Entfernen des Style-Tags aus der Kopfzeile und Drucken der analysierten Ausgabe:
Analysieren Sie HTML mit mehreren komplexen Regeln:
Noch mehr Beispiele:
Siehe auch:
quelle
vim '+:0,$s/foo/test/g' '+:wq! file2' file1
stattdessen einfach .bufdo
. Obwohl Vim praktisch überall installiert ist, sollten Sie wissen, dass Sie die Skriptbearbeitung nur mit POSIX-kompatiblen Funktionen von ausführen könnenex
.ex
und wirklich zu lernen. Vielen Dank. Eine weitere Lektüre zu diesem Thema (vollständige Offenlegung: Ich habe diese geschrieben;) ist: Umkehren aller vier Zeilen mitex
und Verwenden der-c
Option . Sie können sie zu Ihrer Linkliste unten hinzufügen, wenn Sie möchten. :)