Pode ser possível fazer isso (com algumas restrições)
com uma abordagem puramente regex,
mas tal solução seria muito desagradável e um pouco feia.
No entanto, isso não é difícil em awk :
awk '
{
n=0
if ($0 ~ /no = "[0-9]+%"/) {
n = split($0, part, /"/)
if (n == 3) print part[1] "\"" part[2]+1 "%\"" part[3]
}
if (n != 3) print
}'
A declaração (primeiro) if
testa se a linha de entrada contém os caracteres no = " ,
seguido por um ou mais dígitos, seguido por %" .
(Se você quiser combinar apenas no início de uma linha,
adicione um ^ entre o primeiro / e o no .
Se você quiser corresponder apenas no final de uma linha,
adicione um $ entre o %" e o segundo / .)
Em seguida, split a linha é separada entre aspas.
A variável n recebe o número de partes;
para no = "33%" , a contagem é 3,
e as partes são no = , 33% e uma string vazia
(porque não há nada após o segundo " ).
(Observe que as aspas não aparecem nas partes,
porque eles são os separadores.)
part[2]+1 será avaliado como 34 ,
porque awk ignorará o % após o 33 ,
e então a instrução print reposiciona as partes da linha,
com o número aumentado em um.
Como indicado acima, este script permite outras coisas na linha antes e depois do número - mas eles não podem conter citações. Por exemplo,
The quick brown fox no = "33%" What did the bird say?
jumps over the lazy dog. no = "50%" Quoth the raven, "Nevermore."
será convertido para
The quick brown fox no = "34%" What did the bird say?
jumps over the lazy dog. no = "50%" Quoth the raven, "Nevermore."
Se uma linha não contiver no = "number%" ,
não entrará no bloco if ,
e assim chegará ao fundo com n igual a 0.
Se ele contiver no = "number%" ,
mas tem aspas adicionais, então irá entrar no bloco if ,
e n será igual ao número de caracteres de cotação mais um.
De qualquer maneira, o if (n != 3) print
fará com que a linha de entrada seja gravada, não modificada.
awk é um programa padrão no Unix, Linux e outros sistemas semelhantes ao Unix.
(Eu testei esse script com a opção --posix ,
então acredito que não depende de nenhuma extensão GNU.)
Se você não tem acesso a uma máquina Unix (como a) completa,
Eu sugiro que você instale o Cygwin,
ou simplesmente encontre uma versão de awk que é executada em qualquer máquina.