낮은 숫자와 높은 숫자가 혼합된 약 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