Wie kann ich mit vi alle Zeilen in einer Datei löschen?
Im Moment verwende ich dazu etwas wie das hier, um alle Zeilen in einer Datei zu entfernen:
echo > test.txt
Wie kann ich mit alle Zeilen löschen vi
?
Notiz:
Die Verwendung dd
ist keine gute Option. Es können viele Zeilen vorhanden sein.
Antwort1
In vi
tun
:1,$d
, um alle Zeilen zu löschen.
Das :
leitet einen Befehl ein (und bewegt den Cursor nach unten).
Das 1,$
ist ein Hinweis darauf, auf welche Zeilen der folgende Befehl ( d
) wirken soll. In diesem Fall der Bereich von Zeile eins bis zur letzten Zeile (durch gekennzeichnet $
, Sie müssen also nicht wissen, wie viele Zeilen das Dokument hat).
Das letzte d
steht für das Löschen der angegebenen Zeilen.
Es gibt eine kürzere Form ( :%d
), aber ich benutze sie nie. Sie :1,$d
kann leichter „angepasst“ werden, indem man z. B. :4,$-2d
nur die ersten 3 und die letzten 2 Zeilen stehen lässt und den Rest löscht.
Antwort2
In vi verwende ich
:%d
Wo
:
weist vi an, in den Befehlsmodus zu wechseln%
bedeutet alle Zeilend
: löschen
Geben Sie in der Befehlszeile Folgendes ein:
> test.txt
werde ich auch tun.
Was ist das Problem mit dd?
dd if=/dev/null of=test.txt
Wo
/dev/null
ist eine spezielle 0-Byte-Dateiif
ist die Eingabedateiof
ist die Ausgabedatei
Antwort3
Ich empfehle Ihnen, einfach Folgendes zu tun (sollte in jeder POSIX-kompatiblen Shell funktionieren):
> test.txt
Wenn Sie es wirklich mit vi machen möchten, können Sie Folgendes tun:
- 1G (zur ersten Zeile gehen)
- dG (bis zur letzten Zeile löschen)
Antwort4
Wenn sich Ihr Cursor in der ersten Zeile befindet (wenn nicht, geben Sie ein: gg
oder 1G
), können Sie einfach verwenden dG
. Dadurch werden alle Zeilen von der aktuellen Zeile bis zum Ende der Datei gelöscht. Um sicherzustellen, dass Sie alle Zeilen aus der Datei löschen, können Sie beides kombinieren, z. B.: ggdG
(im Befehlsmodus).
Oder %d
im Ex-Modus, Befehlszeilenbeispiel: vim +%d foo.bar
.
Verwandt:Wie kann ich in VIM den gesamten Text von der aktuellen Zeile bis zum Dateiende löschen?