Ich möchte die erste Zeile mehrerer Textdateien entfernen und durch eine andere Zeile ersetzen. Gibt es eine Möglichkeit, dies über das Terminal zu tun?
Ich weiß, wie man vim benutzt. Gibt es eine Möglichkeit, es damit zu automatisieren? Ich möchte es vermeiden, es manuell zu tun (wie beim Bearbeiten jeder Datei einzeln).
Wenn möglich, möchte ich die Installation neuer Bibliotheken vermeiden (insbesondere für solche, die ich für sehr einfach halte - aber ich könnte mich irren).
Danke im Voraus!
quelle
sed
ist eigentlich das, wonach ich gesucht habe!Nun, mit sich
vim
selbst:Was dies bewirkt:
setline (n, text)
ist eine Funktion, die linen
auf setzttext
.call
wird benötigt, um Funktionen aufzurufen.bufdo
wird verwendet, um einen Befehl über Puffer hinweg zu wiederholen (ohne einen Bereich wirkt er auf alle Puffer).wq
Speichert und verlässt den Puffer. Dies müssen wir tun, bevor wir mit dem nächsten Puffer fortfahren, damit dieser Befehl mit demcall
Befehl verkettet wird|
.-c cmd
runningcmd
ist ein Kommando-Mode-Kommando nach dem Laden des ersten Puffers.Nes
Aktiviert den nicht kompatiblen, stillen Ex-Modus, der besser für die nicht interaktive Verarbeitung geeignet ist.Leistungen:
setline
Textinhalt kann beliebig sein - ein&
in einemsed
Ersetzungstext kann unbeabsichtigte Auswirkungen haben.quelle
sed
scheint viel einfacher zu bedienen zu sein, aber es ist wirklich großartig,vim
das gleiche zu tun! Vielen Dank für Ihre Antwort!bufdo
). Stellen Sie sich vor, Sie haben die Dateien bereits geöffnet und ... und zeigen eine Alternative zu1s/foo/bar/
.Ein paar andere Möglichkeiten:
awk
(benötigt eine relativ neue Version von GNUawk
)Perl / Shell
Shell / Coreutils
quelle
Dieses Skript führt die von Ihnen angeforderten Schritte aus und legt die geänderten Dateien in einem neuen Verzeichnis ab, ohne die Originale tatsächlich zu ändern.
quelle
Verwenden
gawk
Beispiel
quelle
jEdit: Ich benutze es zum Massen-Finden und-Ersetzen. Es ist leistungsstark mit der Fähigkeit, RegEx - Regular Expressions zu verwenden. Sie können Dateien in einem Verzeichnis bearbeiten, Dateierweiterungen angeben, z. B. ".html" usw. Sie können das Gebietsschema der Kandidatenänderung im Kontext in einer GUI anzeigen. jEdit ist großartig.
jEdit ist über Ubuntus Software-Center verfügbar.
quelle
Die Befehle tail und cat würden dies leicht tun:
Schließen Sie diese in eine geeignete Schleife ein und verwenden Sie möglicherweise eine richtige und aufrichtige temporäre Datei anstelle eines fest codierten temporären Dateinamens. Ich glaube, dass Bash und andere Shells eine Syntax zum Erstellen temporärer Dateien haben.
Die Option -n von tail hat zwei Interpretationen, abhängig davon, ob das Argument ein Pluszeichen hat. Wenn es ein Pluszeichen hat, bedeutet dies, dass das Ende der Datei ab der angegebenen Zeilennummer angezeigt wird. Ansonsten ist die Anzahl die Anzahl der Zeilen, einschließlich der letzten Zeile, die der Schwanz ausgeben soll.
quelle