¿Cómo encontrar / reemplazar e incrementar un número coincidente con sed / awk?

Directamente al punto, me pregunto cómo usar grep / find / sed / awk para hacer coincidir una determinada cadena (que termina con un número) e incrementar ese número en 1. Lo más cerca que he venido es para concatenar un 1 a el final (que funciona bien) porque el punto principal es simplemente cambiar el valor. Esto es lo que estoy haciendo actualmente:

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

Como no pude averiguar cómo aumentar el número, capturé todo y simplemente anexé un "1". Antes, tenía algo como esto:

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

Así que al menos entiendo cómo capturar lo que necesito.

En lugar de explicar para qué es esto, solo explicaré lo que quiero que haga. Debería encontrar texto en cualquier archivo, recursivamente, basado en el directorio actual (no es importante, podría ser cualquier directorio, así que lo configuraría más adelante), que coincida con "? Cache_version =" con un número. Luego incrementará ese número y lo reemplazará en el archivo.

Actualmente las cosas que tengo arriba funcionan, es solo que no puedo incrementar ese número encontrado al final. Sería mejor poder aumentar en lugar de agregar un "1" para que los valores futuros no sean "11", "111", "1111", "11111", etc.

He revisado docenas de artículos / explicaciones y, a menudo, la sugerencia es usarawk, pero no puedo por mi vida mezclarlos. Lo más cerca que llegué a usarawk, que en realidad no reemplaza nada, es:

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

Me pregunto si hay alguna manera de canalizar unased Al final y pase el nombre del archivo original para quesed puede tener el nombre del archivo y el número incrementado (desde elawk), o lo que sea que necesitexargs tiene.

Técnicamente, este número no tiene importancia; este reemplazo es principalmente para asegurarse de que haya un nuevo número allí, 100% seguro diferente al anterior. Así que mientras escribía esta pregunta, me di cuenta de que también podría usar el tiempo del sistema, segundos desde la época (la técnica que AJAX utiliza a menudo para eliminar el almacenamiento en caché de solicitudes "idénticas" posteriores). Terminé con esto, y parece perfecto:

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

(Primero almaceno el valor para que todos los archivos obtengan el mismo valor, en caso de que se extiendan por varios segundos por cualquier motivo)

Pero todavía me encantaría saber la pregunta original, al incrementar un número coincidente. Supongo que una solución fácil sería convertirlo en un script de bash, pero aún así, pensé que habría una manera más fácil que recorrer cada archivo recursivamente y verificar su contenido para una coincidencia y luego reemplazarlo, ya que simplemente se incrementa un número coincidente ... no hay mucha más lógica. Simplemente no quiero escribir en ningún otro archivo o algo así, debería hacerlo en su lugar, comosed hace con la opción "i".

Respuestas a la pregunta(4)

Su respuesta a la pregunta