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?
command-line
vim
text-processing
großer Baum
quelle
quelle
Antworten:
Dies sollte alle Zeichen vor und einschließlich der ersten Registerkarte in einer beliebigen Zeile löschen:
:%s/^[^\t]*\t//
Befehlszeile
cut
:Standardeinstellungen für Tabulatoren; Wenn Sie etwas anderes wie ein Leerzeichen möchten, fügen Sie hinzu
-d " "
.-f
ist Felder zum Kopieren. 2- bedeutet alles aus (und einschließlich) Spalte 2.quelle
Durch
awk
,Es schneidet die erste Spalte und druckt nur die verbleibende Registerkarte und die zweite Spalte.
Durch
sed
,quelle
In Vi können Sie Folgendes tun, um die erste Spalte (durch Leerzeichen getrennt) zu entfernen:
Für eine durch getrennte Spalte Tabgilt:
:%norm df
Ctrl+VTabDer Befehl, der die erste Spalte aus der Datei entfernen würde (an Ort und Stelle), kann also sein:
Um die Ausgabe vor dem Speichern zu überprüfen (Trockenlauf), ersetzen Sie
-scwq
durch-sc'%p|q!'
.Oder basierend auf Chris Vorschlag , wie:
Alternativ können Sie dies auch im visuellen Modus tun (wenn Sie oben links beginnen):
quelle
:%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]
*
\t
Tab\t
Alternativ können Sie die kürzeste Folge von Zeichen (
.\{-}
) abgleichen, die auf einer Registerkarte endet..*\t
wü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//
quelle
Um den verbleibenden Platz vor der zweiten Spalte zu entfernen, schlage ich vor:
:%norm df
Ctrl+VTabx
quelle