Perl:regx模式匹配

时间:2019-03-06 22:00:01

标签: regex perl

只要我在文件行中找到单词“ .abc.corp:”,我就希望排除这些行:

示例行:

kubernte-fileserver-NN.abc.corp:/srv/export/storage/nsp_updates   1231231  123112  123123  89%  /devops

有人可以帮助我找出正确的正则表达式模式:

我正在尝试以下模式匹配:无法弄清

/^(.*(?!\.abc\.corp).*)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\%\s+([\/\w\d\.-]+)$/

我对$ 1的子模式组感到困惑,并环顾四周!

1 个答案:

答案 0 :(得分:1)

通过“排除”,我假设您要排除整个行。

您的尝试不会排除任何内容,因为Perl始终可以在共享路径中找到某个要拆分的点,该拆分点不会立即跟在.abc.corp之后,就像拆分一样:

kubernte-fileserver-N
N.abc.corp:/srv/export/storage/nsp_updates

或(实际上是这样做的)只是在第一个.*之前就消耗掉了所有东西,而第二个都没有了。

相反,我会先尝试匹配要避免的字符串,否则,请进行实际处理:

if (/^\S+\.abc\.corp:/) {
    # SKIP
}
elsif (/^(.*)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\%\s+([\/\w\d\.-]+)$/) {
    ...
}

除了实际工作之外,这还使代码很多更具可读性。