只要我在文件行中找到单词“ .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的子模式组感到困惑,并环顾四周!
答案 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\.-]+)$/) {
...
}
除了实际工作之外,这还使代码很多更具可读性。