Lubię używać globalnego polecenia vim do wykonywania takich zadań. Dotyczy to dodawania iteracji na początku linii lub modyfikowania symbolu w tekście. Wygląda na bardziej skomplikowane niż inne rozwiązania, ale jest dość elastycznym wzorem do użycia, gdy masz go pod ręką, i można go łatwo modyfikować bez zastanowienia.
Najpierw wybierz zakres (które linie chcesz zastosować). Zwykle używam znaków (np. ma
W pierwszym wierszu i mb
w drugim, ale możesz także użyć numerów linii lub wyboru wizualnego), a następnie wprowadź modyfikację następującego polecenia (obecnie dostosowanego do twojego przypadku użycia)
:let i=1|'a,'bg/^/s/^/\=i.". "/|let i=i+1
Dekonstrukcja
:let i=1
To ustawia zmienną i
z wartością początkową. Zwykle listy zaczynają się od 1, więc ustawiam i na 1.
|
Pasek rozpoczyna nowe polecenie
'a,'b
Ustawia zakres następnego polecenia. Przechodzę od znaku a
do znaku b
, który zostałby ustawiony w pierwszym wierszu i ostatnim wierszu listy.
g/^/
To jest polecenie globalne. Przeszukuje plik (lub zakres) pod kątem określonego wyrażenia regularnego i wykona resztę wiersza poleceń na każdym z pasujących wierszy. Dopasowuję każdą linię, szukając „początku linii”. Jeśli masz tekst podobny do
Item some txt
other text
Item second item
whatever
Item third
i chcę tylko umieścić te etykiety przed Item
i zignorować inne wiersze, zrób g/Item/
lub g/^Item/
zamiast (zakładając dosłowny tekst pozycji)
s/^/\=i.". "/
Spowoduje to wykonanie wyrażenia regularnego w celu zastąpienia początku wiersza wartością i
konkatenowaną przez a .
. Zasadniczo możesz to zrobić w dowolny sposób (na przykład zastąp etykietę Item
numerem).
|let i=i+1
Mimo że pasek rozpoczyna nowe polecenie, ustawia drugie polecenie do uruchomienia w ramach polecenia globalnego, zamiast po zakończeniu globalnego. W rezultacie zwiększamy, i
zanim kolejny wiersz zostanie przetworzony przez g. Oto inne miejsce elastyczności. Modyfikacja i może być dowolna (inkrementacja o 2, wywołanie funkcji, która generuje następny element sekwencji Fibonacciego, cokolwiek).
awk
jest prawdopodobnie narzędziem do tego zadania. Ale jestem na Windowsie (westchnienie).