我正面临使我发疯的情况。我正在设置使用json文件的更新服务器。不要问为什么或如何,它很糟糕,这是我实现它的唯一可能性。
我一直在尝试和研究HOURS(很多),因为我进行了弹道运动并想自己破解。但是我必须意识到自己陷入困境并需要帮助。
非常抱歉,但是我认为这很重要...
该文件是一个衬纸,并重复以下顺序(更改值)(当然)。
"plugin_name_foo_bar": {"buildDate": "bla", "dependencies": [{"name": "bla", "optional": true, "version": "1.00"}], "developers": [{"developerId": "bla", "email": "[email protected]", "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)的其他解决方案。这绝对是讨论之外。
任何帮助表示赞赏:)
干杯扬
正如sputnick指出的那样,解析有点超出sed的含义。仍然,sed的Turing-complete并大胆地将其做为您想要的事情,可以满足我们中许多人不时感受到的{sad,masoch}主义的敦促。
这甚至很容易。
sed '
s/"sha1": /\n/g
s/\("name": "plugin_name_foo_bar"[^\n]*\n"\)[^"]*/\1thenewsha/
s/\n/"sha1": /g
'
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句