Wie lösche ich die zweite Spalte in Vim?

12

Ich habe eine tabulatorgetrennte Datei wie:

name1   verb1   name2   verb2   etc...

Ich möchte die zweite Spalte löschen. Ich habe versucht, eine dieser Antworten zu bearbeiten , war aber nicht mit sedund vertraut awk.

Kann mir jemand helfen?

teaLeef
quelle
@KasiyA Das Original des OP \ t kennzeichnet Registerkarten.
Steeldriver
@steeldriver Ok du hast recht. Ich dachte, es ist ein Teil der Linie. entfernt. Aber ich editiert richtige nach ersten Beitrag .thanks
αғsнιη
1
VIM Visual-Block-Modus löst das Problem nicht? (Strg-V im normalen Modus, wählen Sie die zu löschende Spalte aus x)?
Rmano
@Rmano hilft es, danke, aber kannst du mir sagen, wie ich im visuellen Modus ans Ende der Datei gehe? (Ich habe Strg G ausprobiert, aber es funktioniert nicht).
TeaLeef

Antworten:

10

In vim sollten Sie den Befehl verwenden können

:%s/\t[^\t]*//

(Ersatz, TABgefolgt von null oder mehr Vorkommen eines beliebigen Zeichens, außer TABmit nichts). Wenn Ihre Datei nur zwei Spalten enthält, können Sie eine etwas einfachere verwenden :%s/\t.*oder :%s/\t.*$die ersten TABund alle folgenden Zeichen bis zum Ende der Zeile ersetzen .

Stahlfahrer
quelle
22

Die akzeptierte Antwort ist viel eleganter als diese (ich habe sie hochgestuft!), Aber wenn Sie sich nicht daran erinnern, können Sie den vim visuellen Block-Modus direkt verwenden. Öffne vim und gehe (normaler Modus) zur ersten Ecke der Spalte, so:

Bildbeschreibung hier eingeben

Geben CTRL-VSie ein und Sie können den Cursor bewegen, um die Spalte auszuwählen. Dies ist in der Mitte:

Bildbeschreibung hier eingeben

Um zum Ende zu gelangen, drücken Sie G:

Bildbeschreibung hier eingeben

Der Block scheint kaputt zu sein, weil wir uns in der letzten Zeile befinden, die leer ist. gehe einfach eine Zeile nach oben (mit dem Pfeil nach oben oder k), um es wieder zu sehen ...:

Bildbeschreibung hier eingeben

Jetzt drücken Sie einfach x, um den Block zu löschen:

Bildbeschreibung hier eingeben

Rmano
quelle
6

Ich würde cutdafür verwenden

cut -f1,3- file.txt > newfile.txt
mv newfile.txt file.txt

Sie können innerhalb von vim dies als Filter verwenden, auch (dies alle die Zeilen in der Datei ersetzen wird, können Sie auch (zum Beispiel) verwenden könnte , 2,9anstatt %zu Prozesslinien 2-9, oder wählen Sie die Zeilen , die Sie wollen mit V):

:%!cut -f1,3-

-f1,3-bedeutet "Drucke Feld eins, gefolgt von Feld drei und allen Feldern bis zum Ende der Zeile". Standardmäßig cutwird ein Tabulator als Begrenzer verwendet. Wenn Sie etwas anderes benötigen, verwenden Sie die -dOption (siehe man cut).

Übelsuppe
quelle
4

Sie können entweder versuchen:

:%norm WdW

oder manuell im visuellen Modus:

  1. In die zweite Spalte springen (zB durch Drücken von:) W.
  2. Starte visual-block mit Ctrl+v.
  3. Wählen zweite Spalte (zB durch Drücken von : W, G).
  4. Löschen Sie es durch Drücken von d.

Versuchen Sie Folgendes, um dies direkt von der Befehlszeile aus zu tun:

$ ex +':exe ":%norm f\<Tab>dE"' -scx file

Verwandte Themen: Wie schreibe ich ein Literal für die Tabulatortaste, um sie für Bewegungen zu verwenden?

Siehe auch:

Kenorb
quelle
Ja, +1, aber Vorsicht, wenn Sie am Ende leere Zeilen haben, kann Schritt 3) schief gehen ...
Rmano