連続していない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

関連情報