Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex grep能显示我想要的唯一结果吗_Regex_Linux_Unix_Grep_Cygwin - Fatal编程技术网

Regex grep能显示我想要的唯一结果吗

Regex grep能显示我想要的唯一结果吗,regex,linux,unix,grep,cygwin,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

我有这样的数据

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';*?”文件
,并得到了输出:

;8pctgRBMwdffgEio"
;8pctgRBwsaNezxio"
;8pctgsvMALNejkio"
;8pctgxdfALNebfio"
;8pwerRBMALNetior"
但我期望的结果是:

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

编写所需表达式的可读性更高的方法是:

grep -oP '(?<=;).*(?=")' file
使用
?=
将获取以开头的字符串但是使用
之后,您可以从索引开始。类似地,指定了结束字符串标记


这里是建议的。

您需要使用lookahead和lookbehind正则表达式


grep-oP'(?
PERL正则表达式显然是实验性的,
这在手册中已经存在了很长时间了。如果它们至少可以添加一些不起作用的情况,肯定会有所帮助。我到目前为止还没有遇到过任何情况。此外,这可以简化为
grep-oP';\K[^”]+(?=”
甚至
grep-oP';\K[^”]+“
根据usecaseHi@azmath,它在这里遇到了一个问题,如果数据是
tatusx2.atc?beginnum=0;8pctgrbmwdfgeio“text1”text9“text10”textn
,它将返回输出
8pctgrbmwdfgeio“text1”text9“text10”
嗨,azmath,数据中有一些空格怎么样?
-o --only-matching to the print only the matched parts of a matching line
-P --perl-regexp