这是我的第一个问题!我尝试了很多 grep,仍然没有找到我想要的......
所以,我们到了。
我的 Ubuntu 机器上有很多文件,其中包含以下内容:
{"group":{"name":"Subdivision01","id":"94827-20934-23085"}*manytext*
{"group":{"name":"Department28","id":"11672-23517-87241"}*manytext*
{"group":{"name":"Division07","id":"86267-91634-22516"}*manytext*
我只想拿Subdivision01
和Division05
和Departement14
(长度不同)
所以这意味着之间这第一名的发生":"
和第一名发生","
==>我不知道该怎么做...
感谢您的帮助 :)
答案1
一种方法是使用 Perl 兼容正则表达式,它支持环顾四周:
$ grep -oP '(?<="name":").+?(?=",)' file
Subdivision01
Department28
Division07
启用-P
PCRE 支持并-o
告诉grep
仅打印行的匹配部分。
这(?<=foo)bar
是一个积极的后视bar
:仅当其前面紧邻 时才会匹配foo
。那么,bar(?=foo)
是正数展望bar
,仅当其后紧跟着 时才会匹配foo
。因此,我们使用的正则表达式正在寻找a和 a.+?
之间的最短字符串 ( ) 。"name":"
",