grep只能显示我想要的结果

时间:2018-04-02 06:52:38

标签: regex linux unix grep cygwin

我有数据

tatusx2.atc?beginnum=0;8pctgRB Mwdf fgEio"text1"text4"text
tatqsx3.atc?beginnum=1;8pctgRBwsaNezxio"text2
tatssx4.atc?beginnum=2;8pctgsvMALNejkio"data2
tatksx4.atc?beginnum=1;8pctgxdfALNebfio"text3
tatzsx5.atc?beginnum=3;8pwerRBMALNetior"datac

如何只获取数据;和“ 我尝试了grep -oP ';.*?"' file并得到了输出:

;8pctgRBMwdffgEio"
;8pctgRBwsaNezxio"
;8pctgsvMALNejkio"
;8pctgxdfALNebfio"
;8pwerRBMALNetior"

但我想要的输出是:

8pctgRB Mwdf fgEio
8pctgRBwsaNezxio
8pctgsvMALNejkio
8pctgxdfALNebfio
8pwerRBMALNetior

2 个答案:

答案 0 :(得分:1)

编写所需表达式的更易读的方法是:

grep -oP '(?<=;).*(?=")' file

并将获得所需的结果。 PERL正则表达式显然是实验性的,但某些模式可以毫无问题地工作。

正在使用以下选项:

-o --only-matching to the print only the matched parts of a matching line
-P --perl-regexp

使用?=;会获得以; 开头的字符串,但使用>后,您可以从索引处开始。同样,指定了结束字符串标记。

建议additional reading

答案 1 :(得分:1)

您需要使用前瞻和后瞻性正则表达式

UserDefaults.standard.set

我认为你玩regexr来了解有关正则表达式的更多信息。检查他们的备忘单。