Verschieben Sie Zeilen, die mit: g übereinstimmen, an den Anfang der Datei

8

Ich habe eine große Textdatei mit mehreren Aufrufen einer bestimmten Funktion method_name .

Ich habe sie mit :g/method_name abgeglichen.

Wie würde ich sie an den Anfang der Datei verschieben (mit der ersten Übereinstimmung oben)?

Ich habe :g/method_name/normal ddggP versucht, aber das kehrt die Reihenfolge um. Gibt es eine bessere Möglichkeit, alle übereinstimmenden Zeilen in der richtigen Reihenfolge direkt auszuschneiden und einzufügen?

Beispiel Eingabedatei:

%Vor%

Beispiel Ausgabedatei:

%Vor%     
Dogbert 01.07.2011, 22:56
quelle

3 Antworten

5

Wie wäre es mit einem umgekehrten Versuch: Die nicht übereinstimmenden Zeilen werden nach unten verschoben:

%Vor%

Dies scheint zu erreichen, was Sie wollen.

    
Prince Goulash 01.07.2011, 23:28
quelle
4

Ich denke, Sie können das gewünschte Ergebnis erzielen, indem Sie zuerst eine zugewiesene Variable erstellen zu 0:

%Vor%

Und dann diesen Befehl ausführen:

%Vor%

Im Grunde ruft :m als Adresse den Wert von i auf und erhöht sie dann Dieser Wert ist eins, damit es im nächsten Spiel verwendet werden kann. Scheint zu funktionieren.

Natürlich können Sie die Variable löschen, wenn Sie sie nicht mehr brauchen:

%Vor%     
sidyll 02.07.2011 02:19
quelle
1

Wenn die Datei sehr groß ist, die Anzahl der übereinstimmenden Einträge klein ist und Sie nicht die gesamte Datei mit der Lösung v/<pattern>/ m$ verschieben möchten, können Sie dies tun:

Wählen Sie eine beliebige Marke, die Sie nicht interessieren, sagen Sie 'k . Jetzt tut die folgende Tastenfolge, was Sie wollen:

ggmk:g/method_name/ m 'k-1

  • ggmk markiert die erste Zeile mit 'k .
  • m 'k-1 verschiebt die übereinstimmende Zeile auf 1 Zeile vor der 'k -Markierung (und die Markierung wird mit der Zeile verschoben, an die sie angehängt ist).

Dadurch werden nur einige übereinstimmende Zeilen verschoben, nicht die gesamte Datei.

Hinweis: Das funktioniert auch, wenn die erste Zeile das Muster enthält - und ich habe dafür keine Erklärung.

Für Skripte:

%Vor%     
t7ko 05.02.2016 22:30
quelle

Tags und Links