我正面临一个让我发疯的情况。我正在设置一个使用 json 文件的更新服务器。不要问为什么或如何,这很糟糕,是我实现它的唯一可能性。
我一直在尝试和研究 HOURS(很多),因为我发疯了,想自己破解这个问题。但我必须意识到我被卡住了,需要帮助。
很抱歉这一块,但我认为看到它有点重要......
该文件是一个单行文件,并重复以下序列并更改值(当然)。
"plugin_name_foo_bar": {"buildDate": "bla", "dependencies": [{"name": "bla", "optional": true, "version": "1.00"}], "developers": [{"developerId": "bla", "email": "bla@gmail.com", "name": "Bla bla2nd"}], "excerpt": "some text {excerpt} !bla.png|thumbnail,border=1! ", "gav": "bla", "labels": ["report", "scm-related"], "name": "plugin_name_foo_bar", "previousTimestamp": "bla", "previousVersion": "1.0", "releaseTimestamp": "bla", "requiredCore": "1", "scm": "github.com", "sha1": "ynnBM2jWo25ZLDdP3ybBOnV/Pio=", "title": "bla", "url": "http://bla.org", "version": "1.0", "wiki": "https://bla.org"}, "Exclusion": {"buildDate": "bla", "dependencies": [],
然后下一个插件块直接粘合。我现在要做的是搜索,"plugin_foo_bar": {"
因为这是新插件描述块的唯一标识符。我想替换之后出现的第一个 sha1 值。这就是我一直失败的地方。我总是抓住整个文件中的第一个、最后一个或任何出现的地方,而不是块:(
"title"
是 sha1 值之后的唯一标识符。
所以我试图让 .* 不那么贪婪,但它没有成功。
最后一次尝试是朝着:
sed -i 's/("name": "plugin_name_foo_bar.*sha1": ")([a-zA-Z0-9!@#\$%^&*()\[\]]*)(", "title"\)/\1blablabla\2/1'
default.json
找到该插件的 sha1 值,但仍然没有乐趣。我希望有人知道——最好是更简单的方法——在我现在继续试错之前,直到我不得不呕吐和发疯。
我正在 Windows 上使用 SED,因此 Unix 方法可能会帮助我弄清楚如何批量实现这一目标,但如果可能的话,请将其设为单行。转换脚本真的很痛苦。
而且我只需要 SED 而不需要其他工具(如 AWK)的其他解决方案。这绝对不在讨论范围内。
任何帮助表示赞赏:)
干杯一月