I need to replace one line in a ton of . json files
I'm updating foundry to a version 11 and it broke an ass ton of my assets cause they're all "verified version 10"
So all I have to do is change that number, they're just maps so no need to update anything else, but I have like 400+ files to convert all in individual folders.
Please tell me there's an easy way to do this. (I'm on Linux obviously)
I have made a python script and ran it on a clone of your git repo to confirm it works, simply run it at the root directory of wherever the files are, it will walk through and find module.json and do the replace.
#!/usr/bin/env python3
import re
import os
import fileinput
pattern = re.compile(r'(?P\.+)\"compatibility\":{\"minimum\":\"(?P\\d+)\",\"verified\":\"(?P\\d+)\"},(?P\.+)')
def make11(match):
if match.groupdict().get('min', None) and match.groupdict().get('ver', None):
return f"{match.groupdict()['pre']}\"compatibility\":{{\"minimum\":\"11\",\"verified\":\"11\"}},{match.groupdict()['post']}"
for root, dirs, files in os.walk("."):
for file in files:
if file == "module.json":
for line in fileinput.input(f"{root}/{file}", inplace=True):
print(re.sub(pattern, make11, line))
edit: lemmy is fucking with the formatting and removing the fucking regex group names, which will bork it. I've tried fixing it, dm me if you want me to send a downloadable link to the script
#!/usr/bin/env python3
import re
import os
import fileinput
pattern = re.compile(r'(?P<pre>.+)\"compatibility\":{\"minimum\":\"(?P\d+)\",\"verified\":\"(?P\d+)\"},(?P.+)')
def make11(match):
if match.groupdict().get('min', None) and match.groupdict().get('ver', None):
return f"{match.groupdict()['pre']}\"compatibility\":{{\"minimum\":\"11\",\"verified\":\"11\"}},{match.groupdict()['post']}"
for root, dirs, files in os.walk("."):
for file in files:
if file == "module.json":
for line in fileinput.input(f"{root}/{file}", inplace=True):
print(re.sub(pattern, make11, line))
</pre>
Nah, regexes are okay if you really have no other choice, but they're a bit of a hamfisted tool. For a json file, which is a neatly structured format, I would always try to do it with jq first.