VI删除除模式之外的所有内容

Car*_*uss 2 regex vi vim pattern-matching

我有一个巨大的JSON输出,我只需删除除每行中的一个小字符串之外的所有内容.

字符串具有格式

"title": "someServerName"
Run Code Online (Sandbox Code Playgroud)

"someServerName"(引号内的部分)可能会有很大差异.

我最接近的是:

:%s/\("title":\s"*"\)
Run Code Online (Sandbox Code Playgroud)

但这只是设法删除

"title": "
Run Code Online (Sandbox Code Playgroud)

我想要在每一行中留下的唯一东西是

"title": "someServerName"
Run Code Online (Sandbox Code Playgroud)

编辑回答发布的问题:

我将要使用的文本将具有类似的格式

{"_links": {"self": {"href": "/api/v2/servers/32", "title": "someServerName"},tons_of_other_json_crap_goes_here
Run Code Online (Sandbox Code Playgroud)

我最不想要的就是:

"title": "someServerName"
Run Code Online (Sandbox Code Playgroud)

Jim*_*m K 6

它应该是.*而不是*匹配一组任何字符.这样做的工作:

%s/^.*\("title":\s".*"\).*$/\1/
Run Code Online (Sandbox Code Playgroud)

每个部分的说明:

  • %s/ 替换每条匹配的行.
  • ^.* 忽略从行首开始的任何字符.
  • \("title":\s".*"\)捕获标题和服务器名称. ".*"将匹配引号之间的任何字符.
  • .*$ 忽略其余部分.
  • /\1/替换的结果将是第一个被捕获的组.该小组被括号捕获\(...\).


Pet*_*ker 5

这听起来像是一份工作grep

:%!grep -o '"title":\s*"[^"]*"'
Run Code Online (Sandbox Code Playgroud)

有关 Vim 过滤的更多帮助,请参阅:h :range!

有关/标志man grep的更多信息,请参阅参考资料。-o--only-matching