Adicione 100 a decimais em vários arquivos TXT

0

Estou confuso sobre isso, então preciso de ajuda. Eu tenho vários arquivos txt em uma pasta. E há algum conteúdo nesses arquivos de texto. Agora existe um texto "moveLimit":30, (a vírgula é depois do decimal). Então, como eu adiciono 100 a todos os movimentos decimais em vários arquivos e salvá-los. Os movimentos não são 30 , é um número aleatório em todos os arquivos de texto. E todos eles estão entre 10 e 999.

amostra

{"gameModeName":"Classic moves","moveLimit":106,"numberOfColours":6,"portals":[],"protocolVersion":"0.3","randomConfig":{"mode":"Seed Pool","modeModifier":"Tutorial Only","overrideAbTest":true,"seedPool":[547787]},"randomSeed":1088126,"scoreTargets":[300,400,500],"tileMap":[["000","000","000","000","000","000","000","000","000"],["000","000","000","000","000","000","000","000","000"],["002005","002005","002005","002005","002005","002005","002005","002005","000"],["002","002","002","002","002","002","002","002","000"],["002","002","002","002","002","002","002","002","000"],["002","002","002","002","002","002","002","002","000"],["002","002","002","002","002","002","002","002","000"],["000","000","000","000","000","000","000","000","000"],["000","000","000","000","000","000","000","000","000"]]}
    
por PJ547 08.05.2018 / 09:10

2 respostas

5

Se você dissesse no início que seus arquivos txt são na verdade arquivos JSON (como o seu exemplo parece) - isso teria mudado tudo e evitaria a maioria das perguntas / comentários.

Use ferramentas JSON adequadas, como jq , pois esse seria o caminho certo:

for f in *.txt; do
    if grep -q '"moveLimit":[0-9]*,' "$f"; then
        jq -c '.moveLimit |= . + 100' "$f" > tmp_f && mv tmp_f "$f"
    fi
done
    
por 08.05.2018 / 10:06
1

Em um sistema GNU ou FreeBSD, você pode tentar algo como:

grep  -rl --null '"moveLimit":[0-9]' . |
  xargs -r0 perl -pi -e 's/"moveLimit":\K\d+/$& + 100/ge'
  • grep r ecursivamente l ists os arquivos no diretório atual ( . ) que contêm "moveLimit": seguido por um dígito decimal ( null -eliminado para xargs -0 )
  • xargs -r0 passa essa lista de arquivos para perl
  • perl edita os arquivos i n-place e substitui sequências de dígitos ( \d+ que seguem "moveLimit": com o mesmo número ( $& ) mais 100.
por 08.05.2018 / 10:05