Incrementar números dentro de strings por um deslocamento

6

Eu quero pesquisar um arquivo de texto por strings como essas.

[task0]
[task1]
...
[task1613]

e incrementar cada um por um determinado deslocamento, neste caso por 3640. Então, com o exemplo que dei acima, eu recebo o seguinte.

[task3640]
[task3641]
...
[task5253]

Eu quero cada um dos números incrementados em suas posições originais no arquivo de destino, com [task#] em volta do número. Usando sed :

sed "/^\[task/s/[0-9]*\]/3640+&/" ./test.file2

Eu posso conseguir algo como:

[task3640+0]
[task3640+1]
...
[task3640+1614]

mas isso não é muito útil porque não sei como avaliar as expressões em vigor e

Tenho quase certeza de que sed não é adequado para isso. Eu estou pensando que awk ou perl funcionaria melhor para isso, mas eu sou bastante inepto em ambos.

Alguém pode ao menos me indicar a direção certa, por favor? Eu passei muito mais tempo do que eu quero admitir sobre isso já.

Para uma visão mais detalhada do que quero ver, consulte esta página em pastebin .

    
por user61043 22.02.2014 / 08:36

3 respostas

2

Aqui você pode usar o olhar de Perl para encontrar uma seção de uma string que começa com [task seguido por números. Se isto for encontrado, extrairá os dígitos e adicionará 3640 a eles.

$ perl -p -e 's/(?<=\[task)([0-9]+)/3640+$1/e' sample.txt 
blah blah blah [task3641] blah blah
blah blah blah [task3642] blah blah
blah blah blah [task5254] blah blah
    
por 22.02.2014 / 14:19
2

Aqui você vai (isso vai mudar o arquivo original):

perl -pi -e 's/\[task\K([0-9]+)/3640+$1/e' your_file
    
por 22.02.2014 / 08:44
0

Aqui está uma maneira de fazer isso:

perl -pe 's/(\d+)/$1+3640/e if /^\[task.*\]/' file
    
por 22.02.2014 / 08:47