it-swarm.com.de

Wie kann ich mit vi alle Zeilen in einer Datei löschen?

Wie kann ich mit vi alle Zeilen in einer Datei löschen?

Im Moment mache ich das mit so etwas, um alle Zeilen in einer Datei zu entfernen:

echo > test.txt

Wie kann ich alle Zeilen mit vi löschen?

Hinweis : Die Verwendung von dd ist keine gute Option. Es kann viele Zeilen geben.

285
Cold

In vi do

:1,$d

um alle Zeilen zu löschen.

Das : führt einen Befehl ein (und bewegt den Cursor nach unten).
Das 1,$ gibt an, auf welchen Zeilen der folgende Befehl (d) arbeiten soll. In diesem Fall der Bereich von Zeile eins bis zur letzten Zeile (angezeigt durch $, Sie müssen also nicht die Anzahl der Zeilen im Dokument kennen).
Das letzte d steht für das Löschen der angegebenen Zeilen.

Es gibt eine kürzere Form (:%d) aber ich benutze es nie. Das :1,$d kann leichter "angepasst" werden, z. :4,$-2d nur die ersten 3 und letzten 2 Zeilen belassen, den Rest löschen.

501
Anthon

In vi benutze ich

:%d

wo

  • : weist vi an, in den Befehlsmodus zu wechseln
  • % bedeutet alle Zeilen
  • d: löschen

In der Befehlszeile

> test.txt

wird auch tun.

Was ist das Problem mit dd?

dd if=/dev/null of=test.txt

wo

  • /dev/null ist eine spezielle 0-Byte-Datei
  • if ist die Eingabedatei
  • of ist die Ausgabedatei
182
Archemar

Ich würde empfehlen, dass Sie dies einfach tun (sollte in jeder POSIX-kompatiblen Shell funktionieren):

> test.txt

Wenn Sie es wirklich mit vi machen wollen, können Sie tun:

  • 1G (in die erste Zeile gehen)
  • dG (bis zur letzten Zeile löschen)
55
Chris Down

Wenn sich Ihr Cursor in der ersten Zeile befindet (wenn nicht, geben Sie Folgendes ein: gg oder 1G), dann können Sie einfach dG verwenden. Es 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 beide zusammen mischen. Dies wäre: ggdG (im Befehlsmodus).

Oder %d im Ex-Modus, Befehlszeilenbeispiel: vim +%d foo.bar.

Verwandte: Wie kann ich in VIM den gesamten Text von der aktuellen Zeile bis zum Ende der Datei löschen?

30
kenorb

Ich bin ein fauler Typ, und ich mag es einfach zu halten. ggdG besteht aus fünf Tastenanschlägen, einschließlich Shift

gg geht zur ersten Zeile in der Datei, d ist der Anfang des delete-Verbs und G ist die Bewegung, um zum Ende der Datei zu gelangen Datei. Ausführlich geht es zum Anfang der Datei und löscht alles bis zum Ende der Kachel.

27
TankorSmash

Gehen Sie zum Anfang der Datei und drücken Sie dG.

12
cppcoder

Ich benutze immer ggVG

  • gg springt zum Anfang der aktuellen Bearbeitungsdatei
  • V (großgeschrieben v) wählt die aktuelle Zeile aus. In diesem Fall die erste Zeile der aktuellen Bearbeitungsdatei
  • G (großgeschriebenes g) springt zum Ende der Datei. In diesem Fall wählt G den gesamten Text in dieser Datei aus, da ich die erste Zeile ausgewählt habe.

Dann können Sie einfach d oder x drücken, um alle Zeilen zu löschen.

5
yegle

Eine andere Lösung:

truncate -s 0 file
4
slawx

beachten Sie, dass in Ihrer Frage echo > test.txt erstellt eine Datei mit einem einzelnen Zeilenumbruch, keine leere Datei.

Erwägen Sie in der Shell die Verwendung von echo -n > test.txt oder : > test.txt.

Während ich im Allgemeinen einen vi-Bearbeitungsbefehl verwende (ich verwende ggdG), können Sie die Shell auch mit einem Verweis auf die aktuelle Datei wie folgt aufrufen:

:!:>%

Es ist fast so präzise wie ggdG, aber schwieriger zu tippen, und Sie müssen auch bestätigen, dass Sie die geänderte Datei neu laden möchten. Daher empfehle ich sie in diesem Fall nicht besonders, aber ich weiß, wie man Shell verwendet Befehle von vi wie diesem sind nützlich.

brechen sie ab:

  • : einen vi-Befehl einleiten
  • ! Initiiere einen Shell-Befehl
  • : Dies ist ein in Shell eingebauter Befehl mit leerer Ausgabe
  • > leite die Ausgabe um
  • % vi ersetzt dies durch den Namen der aktuellen Datei

Das vorgeschlagene :1,$d ist natürlich auch gut, und während ich dabei bin, gibt es auch 1GdG

3
mc0e

Art : und %d

(Nicht im Einfügemodus. Wenn ja, drücken Sie zuerst die Esc-Taste.)

1
DimiDak