这就是我想做的。我有一个文件,其中的行以多种方式分隔,并且我想根据这些行中的模式捕获多个子字符串。
因此示例行将如下所示:
servername.domain:2017 08 07.SomeText1.otherIrrelevantStuff;SomeText2.MoreStuff
^^^^^^^^^^ ^^^^^^^^^^ ^^^^^^^^^ ^^^^^^^^^
换句话说,我想在文件的每一行中捕获“servername”、“2017 08 07”、“SomeText1”和“SomeText2”。
我尝试使用 perl -P 和积极的前向/后向执行此操作,但只有第一个有效。每行的结果也应该打印在一行中(因此通过多个 grep -oP 进行管道传输是 Not Acceptable )。
你会怎么做?
最佳答案
在 awk 中,将所需的正则表达式添加到匹配
中:
$ 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
关于regex - 在同一行捕获多个正则表达式模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45622092/