我有一个包含大约 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