Como encontrar / substituir e incrementar um número combinado com o sed / awk?

Direto ao ponto, eu estou querendo saber como usar grep / find / sed / awk para combinar com uma certa string (que termina com um número) e incrementar esse número por 1. O mais próximo que eu venho é concatenar um 1 para o fim (que funciona bem), porque o ponto principal é simplesmente alterar o valor. Aqui está o que estou fazendo atualmente:

find . -type f | xargs sed -i 's/\(\?cache_version\=[0-9]\+\)/\11/g'

Como não consegui descobrir como incrementar o número, capturei tudo e acrescentei um "1". Antes, eu tinha algo assim:

find . -type f | xargs sed -i 's/\?cache_version\=\([0-9]\+\)/?cache_version=\11/g'

Então, pelo menos eu entendo como capturar o que preciso.

Em vez de explicar para que serve isso, vou apenas explicar o que quero fazer. Ele deve encontrar texto em qualquer arquivo, recursivamente, com base no diretório atual (não é importante, poderia ser qualquer diretório, então eu configuraria isso depois), que corresponde a "? Cache_version =" com um número. Em seguida, ele incrementará esse número e o substituirá no arquivo.

Atualmente as coisas que eu tenho acima funcionam, é só que eu não posso incrementar o número encontrado no final. Seria melhor poder incrementar em vez de acrescentar um "1" para que os valores futuros não sejam "11", "111", "1111", "11111" e assim por diante.

Eu já passei por dezenas de artigos / explicações, e muitas vezes, a sugestão é usarawk, mas eu não posso para a vida de mim misturá-los. O mais perto que cheguei de usarawk, que na verdade não substitui nada, é:

grep -Pro '(?<=\?cache_version=)[0-9]+' . | awk -F: '{ print "match is", $2+1 }'

Eu estou querendo saber se há alguma maneira de canalizar umsed no final e passar o nome do arquivo original para quesed pode ter o nome do arquivo e número incrementado (a partir doawk), ou o que for necessárioxargs tem.

Tecnicamente, esse número não tem importância; essa substituição é principalmente para garantir que haja um novo número lá, 100% com certeza diferente do anterior. Então, enquanto escrevia essa questão, percebi que poderia muito bem usar o tempo do sistema - segundos desde a época (a técnica geralmente usada pelo AJAX para eliminar o armazenamento em cache para solicitações "idênticas" subsequentes). Eu acabei com isso e parece perfeito:

CXREPLACETIME=`date +%s`; find . -type f | xargs sed -i "s/\(\?cache_version\=\)[0-9]\+/\1$CXREPLACETIME/g"

(Eu armazeno o valor primeiro para que todos os arquivos recebam o mesmo valor, caso haja vários segundos por qualquer motivo)

Mas eu ainda adoraria saber a questão original, ao incrementar um número correspondente. Eu estou supondo que uma solução fácil seria torná-lo um script bash, mas ainda assim, eu pensei que seria uma maneira mais fácil do que percorrer todos os arquivos de forma recursiva e verificar seu conteúdo para uma correspondência, substituindo, pois é simplesmente incrementar um número correspondente ... não muito mais lógica. Eu só não quero escrever para nenhum outro arquivo ou algo assim - ele deve ser feito no lugar, comosed faz com a opção "i".

questionAnswers(4)

yourAnswerToTheQuestion