删除至少 5 个非连续数字的模式

删除至少 5 个非连续数字的模式

我有一个包含大约 700 万个密码的文件,其中包含混合的低位高位数字

都具有相同长度的 8 个符号

我想删除包含 5 个或更多不需要连续的数字的密码:

例子:

A0s123tf - OK
tttttttt - OK
096545aZ - Remove
Z0123456 - Remove
z445Jz55 - Remove -> fail

例如,如果我这样做:

grep -E -v '[0-9]{5,} myfile 

最后一个单词失败,因为数字不连续。

对于这种情况,正确的正则表达式是什么?

答案1

你需要它是一个正则表达式,或者你可以管道吗?一种巧妙的方法是寻找 5 位数字

$ cat j
A0s123tf
tttttttt
096545aZ
Z0123456
z445Jz55
$ grep -E -v '\d.*\d.*\d.*\d.*\d' j
A0s123tf
tttttttt
$

答案2

或者,搜索逆;由于它们各有 8 个字符长,因此需要 4 个非数字:

grep -E '[^[:digit:]].*[^[:digit:]].*[^[:digit:]].*[^[:digit:]]' myfile

或浓缩一点:

grep -E '([^[:digit:]].*){4}' myfile

相关内容