여러 TXT 파일에서 소수점 + 100

여러 TXT 파일에서 소수점 + 100

나는 이것에 대해 혼란스러워서 도움이 필요합니다. 한 폴더에 여러 개의 txt 파일이 있습니다. 이 텍스트 파일에는 일부 내용이 있습니다. 이제 텍스트 "moveLimit":30,(소수점 뒤에 쉼표)가 있습니다. 그러면 어떻게 100여러 파일에 움직이는 소수점을 모두 추가하고 저장할 수 있나요? 움직임은 가 아니며 30각 텍스트 파일의 임의의 숫자입니다. 모두 10-999 사이입니다.

견본

{"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"]]}

답변1

처음에 파일이 실제로 JSON 파일이라고 말하면 txt(예제에서 볼 수 있듯이) 모든 것이 변경되고 대부분의 질문/댓글이 차단됩니다.

jq이것이 올바른 접근 방식이므로 적절한 JSON 도구를 사용하십시오 .

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

답변2

GNU 또는 FreeBSD 시스템에서는 다음을 시도해 볼 수 있습니다:

grep  -rl --null '"moveLimit":[0-9]' . |
  xargs -r0 perl -pi -e 's/"moveLimit":\K\d+/$& + 100/ge'
  • grep rl현재 디렉터리( )에서 십진수 뒤에 십진수( 의 경우 -delimited)가 포함된 파일을 반복적으로 나열합니다.."moveLimit":nullxargs -0
  • xargs -r0이 파일 목록을 다음으로 전달하세요.perl
  • perl파일 in 비트를 편집하고 일련의 숫자( \d+뒤에 "moveLimit":같은 숫자( $&) + 100)를 바꿉니다.

관련 정보