在同一行上捕获多个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'