Use perl:
perl -pe 's/(?<=\[)(\d+)(?=\])/$1+1/ge' prova.txt
Explicação:
-
-p
significa repetir todas as linhas e imprimir o resultado depois de cada linha -
-e
define a expressão a ser executada em todas as linhas -
s/from/to/
faz uma simples subestição -
s/(\d+)/$1+1/ge
corresponde a um ou mais dígitos, captura-o em$1
e, em seguida, o modificadore
no final informa ao perl que a sequência de subseqüência é uma expressão:$1+1
substitui o valor$1
plus 1.g
modifier significa fazer esta substituição globalmente, ou seja, mais de uma vez por linha. -
(?<=\[)
é uma asserção lookbehind de comprimento zero positiva. Isso significa que o que vem depois só coincide se for precedido por[
(que precisa ser escapado com\
, pois[
é um token especial em expressões regulares). A coisa de comprimento zero significa que não faz parte do que será substituído. -
(?=\])
é uma asserção lookahead positiva de comprimento zero. Isso significa que o que vem antes só coincide se for seguido por]
(novamente escapou).
Então, isso levará todos os números entre [
e ]
e incrementará esse número.