2013-04-18 50 views
0

我有一個sed命令來替換格式JSON鍵值對這有什麼錯我的sed的正則表達式

"XXXXX" : "YYYYY" 

"XXXXX" : YYYYY 

這裏是我的sed命令,

sed -i 's/\("$\$XXXX\$\$\"\s*:\s*\"\)[^\"]*/\1YYYY/' 

現在我想修改上面的正則表達式來更新鍵值對。

實施例:

"XXXXX" : "YYYYY" 

應該被更新爲

"XXXXX" : "ZZZZZ" 

"XXXXX" : YYYYY 

應該被更新爲

"XXXXX" : ZZZZZ 

注意區別,如果值是用引號引起來的,值應該用引號更新並且它的值沒有引號,那麼它也應該更新它

這是我想出的sed命令,但它沒有沒有工作。

sed -i 's/\("$\$"qc.testset.ids"\$\$\"\s*:\s*"*\)[^\"]*/\1123123"*/' 

我在這裏錯過了什麼?我如何讓我的正則表達式支持這兩種格式?

+0

所以,你想從' 「XXXXX」 傳: 「YYYYY」'到' 「XXXXX」:YYYYY '? – fedorqui

+0

@fedorqui刪除了我描述中的含糊之處。基本上,我想我的正則表達式更新鍵格式爲「XXXXX」:「YYYYY」和「」XXXXX「:YYYYY」。 – bram

+0

對。我做了一些更新,使其更加清晰。無論如何,你能展示一個理想的輸出結果嗎? – fedorqui

回答

1

使用另購的Capture組:

$ cat file 
"XXXXX" : "YYYYY" 
"XXXXX" : YYYYY 
"XXXXX" : "YYYYY", 
"XXXXX" : YYYYY, 

$ sed -r 's/^("XXXXX" :)(")?[^",]*(")?/\1\2ZZZZZ\3/' file 
"XXXXX" : "ZZZZZ" 
"XXXXX" : ZZZZZ 
"XXXXX" : "ZZZZZ", 
"XXXXX" : ZZZZZ, 
+0

感謝您的解決方案。它可以正常工作,但是如果鍵值對的格式爲「XXXXX」:「YYYYY」,則它會更新爲「XXXXX」:「ZZZZZ」,「 但是」XXXXX「:YYYYY」更新爲'「XXXXX」:ZZZZZ'。請注意,逗號缺失。 我試圖編輯你的正則表達式,但無法得到它的工作,你可以看看它。 'sed -r's/^(「XXXXX」\ s *:\ s *)(「)?[^」] *(「)?(,)?/ \ 1 \ 2NEW_VALUE \ 3 \ 4 /' ' – bram

+1

這從來不是一個規範,所以當然它不會如預期的那樣工作,幸運的是修復是微不足道的。你應該從一開始就讓你的問題清晰並具有代表性。 –

+0

非常感謝:)在一小時內得到答案我正在挖掘一天以上! – bram

0

這sed中也能正常工作:

sed '/^"XXXXX"/{s/YYYYY/ZZZZZ/}' file