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)
它应该是.*而不是*匹配一组任何字符.这样做的工作:
%s/^.*\("title":\s".*"\).*$/\1/
Run Code Online (Sandbox Code Playgroud)
每个部分的说明:
%s/ 替换每条匹配的行.^.* 忽略从行首开始的任何字符.\("title":\s".*"\)捕获标题和服务器名称. ".*"将匹配引号之间的任何字符..*$ 忽略其余部分./\1/替换的结果将是第一个被捕获的组.该小组被括号捕获\(...\).这听起来像是一份工作grep。
:%!grep -o '"title":\s*"[^"]*"'
Run Code Online (Sandbox Code Playgroud)
有关 Vim 过滤的更多帮助,请参阅:h :range!。
有关/标志man grep的更多信息,请参阅参考资料。-o--only-matching