我正面临一个让我疯狂的局面。 我正在设置使用json文件的更新服务器。 不要问为什么或如何,它很烂,是我唯一的可能性。sed--试图在比赛后取代第一次出现
我一直在努力和研究小时(很多),因为我去弹道,想要自己破解这个。但我必须意识到我陷入困境并需要帮助。
因此,对于这个区块抱歉,但我认为这是看有点重要...
的文件是一个内衬和重复不断变化的值(当然)按以下顺序。
"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": ")([[email protected]#\$%^&*()\[\]]*)(", "title"\)/\1blablabla\2/1'
default.json
找到该插件的SHA1值,但仍然没有喜悦,我希望有人知道 - 最好是一个更简单的方法 - 之前,我现在继续。试验和错误,直到我不得不呕吐和发作。
我在Windows上使用SED,所以Unix方法可能会帮助我弄清楚如何在批处理中实现这一点,但如果可能的话,请将它作为一行。脚本是一个真正的转换痛苦。
而我只需要SED,而不需要其他工具,比如AWK。这绝对没有讨论。
任何帮助表示赞赏:)
干杯 月
首先,JSON的你给的部分似乎不完整,或至少它不” t似乎是平衡的。是否有一些缺失的文字?其次,在主文本中,你说要搜索''plugin_foo_bar':{...}“。这是''plugin_name_foo_bar''的拼写错误吗?你给的sed例子看起来是''name': “plugin_name_foo_bar”',虽然两者都在''sha1''字段之前有所不同,但是你想说哪一个? –
我知道你必须有一个sed解决方案,但除非这是一个sed任务,否则我会强烈建议查看'jq'(http://stedolan.github.io/jq/)。jq是一个非常强大的命令行json操纵器(有点像awk,如果awk被设计为本地读取/写入json)。有32位和64位二进制文件可用,最简单的jq解决方案大致类似于'jq -c'.plugin_name_foo_bar.sha1 =“xyzzy”' –
这段代码实际上并不完整,但感兴趣的部分就是那个特定的部分在这里它重新发生了几百次 事实上一个错字。对不起:( “名称”:“bla”应该是“名称”:“plugin_name_foo_bar” – wakkaluba