내 이메일 목록에서 제거하고 싶은 무료 이메일 제공업체의 긴 목록을 찾았습니다.https://gist.github.com/tbrianjones/5992856
다음은 소수 또는 단일 도메인 항목에 대해 동일한 작업을 수행하는 현재 사용하는 두 가지 명령입니다. 그러나 다른 파일에서 단어를 가져오도록 명령을 변환하려면 어떻게 해야 합니까? remove.txt
예를 들어, 모든 항목을 수동으로 추가하는 대신.
ruby -rcsv -i -ne 'row = CSV::parse_line($_); puts $_ unless row[2] =~ /gmail|hotmail|qq.com|yahoo|live.com|comcast.com|icloud.com|aol.co/i' All.txt
sed -i '/^[^,]*,[^,]*hotmail/d' All.txt
아래는 우리가 사용할 데이터 행입니다.
"fox*******","scott@sc***h.com","821 Ke****on Rd","Neenah","Wisconsin","54***6","UNITED STATES"
답변1
두 단계:
- 삭제 스크립트(AUX) 생성
print unless m!gmail.com!hotmail.com|...!
(정규식은 크지만 문제 없음) - 그것을 적용하다
All.txt
암호:
perl -n0E 's/\n/|/g; say "print unless m!\\b($_ç)\\b!\n" ' remove.txt > AUX
perl -n AUX All.txt > outfile
업데이트 1: 대소문자를 구분하지 않으려면 i
다음을 추가하세요.
perl -n0E 's/\n/|/g; say "print unless m!@($_=)\\b!i\n" ' remove.txt > AUX
업데이트 2에는 추가 제거 필드가 있습니다. 예외 목록(extra.txt)이 포함된 새 파일을 만들고 다음을 수행합니다.
cat remove.txt extra.txt |
perl -n0E 's/\n/|/g; say "print unless m!@($_=)\\b!i\n" ' > AUX
perl -n AUX All.txt > outfile
답변2
{ sed -ne's/./^[^,]*,[^,]*&/p' |
grep -vf- ./All.txt
} <./remove.txt >./outfile
내 생각엔 그게 당신이 물어본 질문인 것 같아요. ruby
말씀하신 데이터 케이블과 무슨 관련이 있는지 잘 모르겠습니다 .
대소문자를 구분하지 않고 일치시키려면 -i
대소문자 무시 옵션을 추가하세요 grep
.
{ sed -ne's/./^[^,]*,[^,]*&/p' |
grep -ivf- ./All.txt
} <./remove.txt >./outfile