Vi mehrere Files bearbeiten

M

mahed

Aktives Mitglied
Thread Starter
Dabei seit
26.03.2006
Beiträge
411
Reaktionspunkte
1
Hallo zusammen
Wie kann ich mit Vi bei 300 Files die ersten zwei Zeilen auf einmal löschen?
vi *files
:argdo :<BEFEHL>|update

Was soll für <BEFEHL> eingesetzt werden?

Vielen Dank für Hinweise.
 
Zum Beispiel so:

for a in *files; do vi "+:1,2d" $a; done

1,2d ist der Befehl zum löschen der Zeilen 1 bis 2
 
Aha, danke. Und '+' bedeutet wohl, das der folgende Befehl nach dem Öffnen von Vi ausgeführt werden soll.
 
Aha, danke. Und '+' bedeutet wohl, das der folgende Befehl nach dem Öffnen von Vi ausgeführt werden soll.

Ja.
... und ich hatte noch das Speichern und schließen vergessen:

for a in heinz*;do vi "+:1,2d" "+wq" $a;done
 
Genau, hab mich schon gefragt, wie das Aussteigen aus dem File eigentlich funktioniert. Coole Sache, dass sich mit dem '+' Operator Befehle über die Kommando Zeile an Vim übergeben lassen.
 
Für sowas würd ich einfach sed nehmen.

for i in *files
do
sed -i '1,2d' $i
done
 
Ja, danke. Könntest du kurz die Anweisung geben, wie man die letzten drei Zeilen in *files löschen würde?

Besten Dank
 
Ja, danke. Könntest du kurz die Anweisung geben, wie man die letzten drei Zeilen in *files löschen würde?

Besten Dank

Dafür muss man mit sed schon richtige Shell-Scripte erstellen. sed weiss ja erstmal nicht wieviele Zeilen die Datei hat, d.h. im ersten Schritt müsstest Du feststellen wieviele Zeilen die Datei hat und danach die letzten drei Zeilennummern an sed übergeben wie oben dargestellt.
Das Shellscript würde dann z.B. so ausschauen:

#!/bin/sh
total_lines=`wc -l $1 | awk '{print $1}'`
((first_line_to_delete=$total_lines-3))
sed -i "$i{first_line_to_delete},${total_lines}d" $1

Der Aufruf auf der Konsole dann

for i in *files
do
shellscript.sh $i
done
 
Ok. Nicht schlecht. Ich dachte mir, es könnte evtl. ähnlich wie in Python sein, wo das letzte Element einer Liste auch mit liste[-1] angesprochen werden kann. Aber so ist das auch in Ordnung.
Ist das evtl. auch direkt in Vi möglich? Kann Vi in mehreren (hundert) Files, die unterschiedlich lang sind, die letzten drei Zeilen löschen?

Besten Dank für die bisherigen Hinweise.
 
Im Prinzip ist die Vorgehensweise mit dem vi identisch. Du musst halt das Kommando sed gegen den passenden vi Aufruf tauschen.
 
Ja, eben, das passende Kommando um die letzten drei Zeilen in unterschiedlich langen Files zu löschen kenne ich ja gerade nicht. Das wäre schon recht hilfreich zu wissen.

Besten Dank aber für die Postings
 
Anhand dieses Threads kannst Du dir das eigentlich selber zusammenbauen. ;-)
 
vi "+:1,2d" "+:\$d" "+:\$d" "+:\$d"
 
Zurück
Oben Unten