2013-04-27 14 views
1

標準的正則表達式sed的:「重複的操作員操作無效」使用捕獲組

我有一個(部分)JSON字符串,像這樣:

"99887":{"foo":"99887","bar":"paul"},"88776":{"foo":"88776"... 

我需要擺脫掉了"<number>":每個{產生這種前:

{"foo":"99887","bar":"paul"},{"foo":"88776"... 

對於純的正則表達式我會使用該圖案("\d{5}"\:)(\{)一個d保持$2

的sed

我有困難把這個成sed命令:

sed 's/\("\d{5}":\)\(\{\)/\2/g' 

產生錯誤信息

error: repetition-operator operand invalid

在其他情況下該消息似乎涉及sed不支持預讀/後退(我不使用)的事實。

回答

2

您的SED的問題是:

  • 你沒有使用-r,這樣的sed不會使用正則表達式擴展
  • \d{5}不會被SED的認可,\{無效可能是因爲它不是封閉

(不-r,你可以使用\{5\};與-r,你可以{5}

此行應該給你所期望的輸出:

sed 's/"[0-9]*":{/{/g' file 
+0

Arrghh,是的,即使我最初的正則表達式是不是很簡單。很高興知道'sed'不支持'\ d'和'{n}'。 – 2013-04-27 21:51:55

+0

如果您添加'-r'選項,則會支持'{n}'。 – Kent 2013-04-27 22:20:37

+0

是的,但在OS X上不支持'-r' :( – 2013-04-28 08:13:31