Eu gosto de usar o comando global vim para realizar tarefas como esta. Isso se aplica à adição da iteração ao início de uma linha ou à modificação de um símbolo no texto. Parece mais complicado do que as outras soluções, mas é um padrão bastante flexível para usar quando você o tem à mão e é fácil de modificar sem muita reflexão.
Primeiro, escolha seu intervalo (quais linhas você deseja aplicar). Eu costumo usar marcas (por exemplo, ma
na primeira linha e mb
na segunda, mas você também pode usar números de linha ou seleção visual) e, em seguida, insiro uma modificação do seguinte comando (atualmente ajustado para o seu caso de uso)
:let i=1|'a,'bg/^/s/^/\=i.". "/|let i=i+1
Desconstrução
:let i=1
Isso configura a variável i
com um valor inicial. Normalmente, as listas começam com 1, então estou configurando i para 1.
|
A barra inicia um novo comando
'a,'b
Isso define o intervalo do próximo comando. Vou de marca a
em marca b
, que seria definida na primeira e na última linha da sua lista.
g/^/
Este é o comando global. Ele procura no arquivo (ou intervalo) uma expressão regular especificada e executa o restante da linha de comando em cada uma das linhas correspondentes. Estou correspondendo todas as linhas pesquisando "início de linha". Se você tivesse um texto como
Item some txt
other text
Item second item
whatever
Item third
e só deseja colocar esses rótulos na frente Item
e ignorar as outras linhas, faça g/Item/
ou g/^Item/
substitua (assumindo o texto literal do item)
s/^/\=i.". "/
Isso executa a expressão regular para substituir o início da linha pelo valor de i
concatenado por a .
. Geralmente, você pode fazer isso com qualquer coisa (substitua a etiqueta Item
pelo número, por exemplo).
|let i=i+1
Mesmo que a barra inicie um novo comando, ela configura um segundo comando para executar no comando global, em vez de após a conclusão da global. O resultado é que incrementamos i
antes que a próxima linha seja processada por g. Aqui está outro lugar de flexibilidade. A modificação de i pode ser qualquer coisa (incremento de 2, chame uma função que gera o próximo elemento da sequência de Fibonacci, qualquer que seja).
awk
é provavelmente a ferramenta para este trabalho. Mas estou no Windows (suspiro).