2013-04-27 3 views
1

Стандартная регулярное выражениеСЭД: «повторение-оператор операнда недопустимый» с помощью захватывая группам

У меня есть (частично) JSON строку следующим образом:

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

мне нужно, чтобы избавиться от в в "<number>": перед каждым { производить это:

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

для простого регулярного выражения Я хотел бы использовать шаблон ("\d{5}"\:)(\{) d держать $2.

СЭД

У меня возникли трудности, превращая это в SED команды:

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

выдает сообщение об ошибке

error: repetition-operator operand invalid

В других контекстах эти сообщения, кажется, относятся к тот факт, что sed не поддерживает look-ahead/behind (который я не использую).

ответ

2

проблема вашего SED является:

  • вы не использовали -r, поэтому СЭД не будет использовать расширенный REGEX
  • \d, {5} не будет признан СЕПГОМ, \{ не является действительным либо потому, что она не закрыта

(без -r, вы могли бы использовать \{5\}, с -r, вы могли бы {5})

эта линия должна дать вам ожидаемый результат:

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

Arrghh, да, даже мой первоначальный шаблон регулярного выражения не очень прямо вперед. Полезно знать 'sed' не поддерживает' \ d' и '{n}'. –

+0

, если вы добавите опцию '-r', будет поддерживаться' {n} '. – Kent

+0

Да, но '-r' не поддерживается на OS X :( –

Смежные вопросы