Ich verwende gerne den Befehl vim global, um solche Aufgaben zu erledigen. Dies gilt für das Hinzufügen einer Iteration am Anfang einer Zeile oder das Ändern eines Symbols im Text. Es sieht komplizierter aus als die anderen Lösungen, ist aber ein ziemlich flexibles Muster, das Sie verwenden können, wenn Sie es zur Hand haben, und lässt sich leicht ohne viel Nachdenken ändern.
Wählen Sie zunächst Ihren Bereich aus (welche Linien möchten Sie anwenden). Normalerweise verwende ich Markierungen (z. B. ma
in der ersten und mb
in der zweiten Zeile , aber Sie können auch Zeilennummern oder eine visuelle Auswahl verwenden) und gebe dann eine Änderung des folgenden Befehls ein (derzeit für Ihren Anwendungsfall optimiert).
:let i=1|'a,'bg/^/s/^/\=i.". "/|let i=i+1
Dekonstruktion
:let i=1
Dies setzt eine Variable i
mit einem Startwert. Normalerweise beginnen Listen mit 1, also setze ich i auf 1.
|
Die Leiste startet einen neuen Befehl
'a,'b
Dies legt den Bereich des nächsten Befehls fest. Ich gehe von Punkt a
zu Punkt b
, der in der ersten und letzten Zeile Ihrer Liste steht.
g/^/
Dies ist der globale Befehl. Es durchsucht die Datei (oder den Bereich) nach einem bestimmten regulären Ausdruck und führt den Rest der Befehlszeile in jeder der übereinstimmenden Zeilen aus. Ich passe jede Zeile an, indem ich nach "Zeilenanfang" suche. Wenn Sie Text mögen
Item some txt
other text
Item second item
whatever
Item third
und möchten diese Bezeichnungen nur vor Item
die anderen Zeilen setzen und sie ignorieren, g/Item/
oder g/^Item/
stattdessen (unter der Annahme des wörtlichen Elementtexts)
s/^/\=i.". "/
Dadurch wird der reguläre Ausdruck ausgeführt, um den Zeilenanfang durch den Wert von i
Verkettet mit einem zu ersetzen .
. Im Allgemeinen können Sie dies für alle Fälle tun (ersetzen Sie beispielsweise das Etikett Item
durch die Nummer).
|let i=i+1
Obwohl die Leiste einen neuen Befehl startet, richtet sie einen zweiten Befehl ein, der innerhalb des globalen Befehls ausgeführt wird, anstatt nach Abschluss des globalen Befehls. Das Ergebnis ist, dass wir inkrementieren, i
bevor die nächste Zeile von g verarbeitet wird. Hier ist ein weiterer Ort der Flexibilität. Die Modifikation von i kann alles sein (inkrementiere um 2, rufe eine Funktion auf, die das nächste Element der Fibonacci-Sequenz erzeugt, was auch immer).
awk
ist wahrscheinlich das Werkzeug für diesen Job. Aber ich bin auf Windows (seufz).