低い数字と高い数字が混在する約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