我正面臨一個讓我瘋狂的局面。 我正在設置使用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