私の電子メールリストから削除したい無料の電子メールプロバイダの長いリストを見つけました。https://gist.github.com/tbrianjones/5992856
以下は、少数または単一ドメイン項目に対して同じ操作を実行するために現在使用されている2つのコマンドです。しかし、他のファイルから単語を取得するようにコマンドを変換するにはどうすればよいですか?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
2つのステップ:
- 削除スクリプト(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