在同一行上捕获多个regexp模式

在同一行上捕获多个regexp模式,regex,linux,awk,sed,grep,Regex,Linux,Awk,Sed,Grep,这是我想做的。我有一个以多种方式分隔行的文件,我想根据这些行的模式捕获多个子字符串 因此,示例行如下所示: servername.domain:2017 08 07.SomeText1.otherIrrelevantStuff;SomeText2.MoreStuff ^^^^^^^^^^ ^^^^^^^^^^ ^^^^^^^^^ ^^^^^^^^^ 换句话说,我想在文件的每一行中捕获“servername”、“2017 08 07”、“S

这是我想做的。我有一个以多种方式分隔行的文件,我想根据这些行的模式捕获多个子字符串

因此,示例行如下所示:

servername.domain:2017 08 07.SomeText1.otherIrrelevantStuff;SomeText2.MoreStuff
^^^^^^^^^^        ^^^^^^^^^^ ^^^^^^^^^                      ^^^^^^^^^
换句话说,我想在文件的每一行中捕获“servername”、“2017 08 07”、“SomeText1”和“SomeText2”

我试着用perl-p和正向前瞻/向后看来实现它,但只有第一个有效。每行的结果也应该打印在一行中(因此通过几个grep-oP的管道是不可接受的)


如何操作?

在awk中,将所需的regexp添加到
匹配项中

$ awk '
BEGIN { OFS="," }
{
    while(match($0,/servername|2017 08 07|SomeText1|SomeText2/)) {
        b=b (b==""?"":OFS)substr($0,RSTART,RLENGTH)
        $0=substr($0,RSTART+RLENGTH)
    } 
    print b
}' file
servername,2017 08 07,SomeText1,SomeText2

似乎要在
之前提取字符串,直到
已满足。如果逻辑是您想要的,那么您可以将
grep
与perl一起使用

$ s="servername.domain:2017 08 07.SomeText1.otherIrrelevantStuff;SomeText2.MoreStuff"

$ grep -oP '[0-9a-zA-Z\s]+(?=\.)' <<< "$s"
servername
2017 08 07
SomeText1
SomeText2
$s=“servername.domain:2017 08 07.SomeText1.otherinterrelatentstuff;SomeText2.MoreStuff”

$grep-oP'[0-9a-zA-Z\s]+(?=\)'请将该示例输入的所需输出添加到您的问题中。
awk-F'[.:;]“{print$1,$3,$4,$6}”文件
?该文件每行的所需输出应该是这样的:servername 2017 08 07 SomeText1 sometext2在这种情况下,grep的问题是它在不同的行上打印输出。输出应该是单行(每行文件),因此例如:servername 2017 08 07 SomeText1 SomeText2可以通过管道将输出传输到
tr-d'\n'