Erste Spalte mit vim löschen

7

Ich habe eine Textdatei.

number 1_1 \t number1_2 \t etc
number 2_1 \t number2_2 \t etc

Ich möchte die erste Spalte dieser Datei entfernen (entsprechend Nummer1_1, Nummer2_1 usw., dh die Nummern vor der ersten Registerkarte für jede Zeile). Ich habe diesen Beitrag gelesen , der eine Lösung zum Löschen der ersten Spalte vorschlägt (siehe Peters Antwort). Bei mir funktioniert dies jedoch nicht, da die Zahlen unterschiedliche Größen haben und ich den Vorgang zum Löschen der ersten Spalte nicht wiederholen kann. Wie kann ich dann machen?

großer Baum
quelle
Möchten Sie eine vim-spezifische Lösung?
Job
vorzugsweise, aber nicht unbedingt (was schlagen Sie noch vor?)
bigTree
@bigTree Möchten Sie Befehlszeilenantworten?
Avinash Raj
1
@ AvinashRaj Kommandozeile Antworten wäre gut danke
bigTree

Antworten:

6

Dies sollte alle Zeichen vor und einschließlich der ersten Registerkarte in einer beliebigen Zeile löschen:

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

Befehlszeile cut:

cut -f 2- {filename.txt} > {filenamenew.txt}

Standardeinstellungen für Tabulatoren; Wenn Sie etwas anderes wie ein Leerzeichen möchten, fügen Sie hinzu -d " ". -fist Felder zum Kopieren. 2- bedeutet alles aus (und einschließlich) Spalte 2.

Rinzwind
quelle
4

Durch awk,

awk -F"\t" '{print FS,$2}' file > newfile

Es schneidet die erste Spalte und druckt nur die verbleibende Registerkarte und die zweite Spalte.

Durch sed,

sed -r 's/^([^\t]*)\t(.*)$/\t\2/g' file > newfile
Avinash Raj
quelle
3

In Vi können Sie Folgendes tun, um die erste Spalte (durch Leerzeichen getrennt) zu entfernen:

:%norm dW

Für eine durch getrennte Spalte Tabgilt:

:%norm dfCtrl+VTab

Der Befehl, der die erste Spalte aus der Datei entfernen würde (an Ort und Stelle), kann also sein:

ex +"%norm df$(echo -e '\t')" -scwq file

Um die Ausgabe vor dem Speichern zu überprüfen (Trockenlauf), ersetzen Sie -scwqdurch -sc'%p|q!'.

Oder basierend auf Chris Vorschlag , wie:

ex -c':exe ":%norm df\<Tab>"' -sc'%p|q!' <(echo -e "a a\tb b\tc c")

Alternativ können Sie dies auch im visuellen Modus tun (wenn Sie oben links beginnen):

  1. Geben Sie den visuellen Block durch ein Ctrl+v.
  2. Springen Sie am Ende und wählen Sie die erste Spalte durch Drücken von : G, E(oder manuell anpassen).
  3. Drücken Sie d, um den ausgewählten Block zu löschen.
Kenorb
quelle
3

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

%Ersetzen Sie in jeder Zeile ( ) ( ) das erste Vorkommen von "Nicht-Tabulator-Zeichen ( in einer beliebigen Zahl ( )) gefolgt von einem Tabulator " durch nichts. Sie können anstelle von eingeben .s/ORIGINAL/REPLACEMENT/[^\t]*\tTab\t

Alternativ können Sie die kürzeste Folge von Zeichen ( .\{-}) abgleichen, die auf einer Registerkarte endet. .*\twürde mit der längsten Übereinstimmung für übereinstimmen .*, also würde es mit allen bis auf die letzte Spalte übereinstimmen; .\{-}entspricht der kürzesten Übereinstimmung, die die erste Spalte ist.

:%s/.\{-}\t//

Gilles 'SO - hör auf böse zu sein'
quelle
0

Um den verbleibenden Platz vor der zweiten Spalte zu entfernen, schlage ich vor:

:%norm dfCtrl+VTabx

SergioAraujo
quelle