sed:使用捕获组的“重复运算符操作数无效”

Mar*_*tör 2 sed

标准正则表达式

我有一个(部分)JSON 字符串,如下所示:

"99887":{"foo":"99887","bar":"paul"},"88776":{"foo":"88776"...
Run Code Online (Sandbox Code Playgroud)

我需要去掉每个之前的数字字符串{才能产生这个:

{"foo":"99887","bar":"paul"},{"foo":"88776"...
Run Code Online (Sandbox Code Playgroud)

对于普通的正则表达式,我会使用模式("\d{5}"\:)(\{)并保留$2.

sed

我在将其转换为 sed 命令时遇到困难:

sed 's/\("\d{5}":\)\(\{\)/\2/g'
Run Code Online (Sandbox Code Playgroud)

产生错误消息

错误:重复运算符操作数无效

sed在其他上下文中,此消息似乎与不支持前瞻/后瞻(我不使用)的事实有关。

Ken*_*ent 6

你的 sed 的问题是:

  • 你没有使用-r,所以 sed 不会使用扩展正则表达式
  • \d{5}不会被 sed 识别,\{也无效,因为它没有关闭

(没有-r,你可以使用\{5\};有-r,你可以{5}

这一行应该给你预期的输出:

 sed 's/"[0-9]*":{/{/g' file
Run Code Online (Sandbox Code Playgroud)

  • @MarcelStör 我相信它在 Mac OS X 上是“-E”而不是“-r”。 (8认同)