O script a seguir está compilando file1.txt em uma única regex para grep -E .
#!/bin/sh
regex="^($(awk '{printf $0"|"}' $1) )+\$"
grep -E "$regex" $2
Uso:
$ ./script.sh file1.txt file2.txt
SORTED_RECIPS HFILTER_HELO_5
$regex é compilado a partir de file1.txt da seguinte forma:
^(ME_HTML_ONLY|SUSPICIOUS_RECIPS|SORTED_RECIPS|HFILTER_HELO_5| )+$
Para milhares de file1.txt e file2.txt com milhões de linhas, seria melhor compilar todo o file1.txt's em um único programa awk com o seguinte script:
#!/bin/sh
for i; do
regex="^($(awk '{printf $0"|"}' $i) )+\$"
echo "/$regex/ { print \"$i: \"\$ ./script2.sh match*.txt
/^(ME_HTML_ONLY|SUSPICIOUS_RECIPS|SORTED_RECIPS|HFILTER_HELO_5| )+$/ { print "match1.txt: "$0 }
/^(HFILTER_FROM_BOUNCE|FORGED_OUTLOOK_HTML|ANY_OTHER_WORD| )+$/ { print "match2.txt: "$0 }
/^(SORTED_RECIPS|HFILTER_HELO_5|MIME_HTML_ONLY|HFILTER_FROM_BOUNCE| )+$/ { print "match3.txt: "$0 }
$ ./script2.sh match*.txt >match.awk
$ awk -f match.awk file2.txt
match2.txt: HFILTER_FROM_BOUNCE FORGED_OUTLOOK_HTML
match1.txt: SORTED_RECIPS HFILTER_HELO_5
match3.txt: SORTED_RECIPS HFILTER_HELO_5
match3.txt: MIME_HTML_ONLY HFILTER_FROM_BOUNCE
}"
done
Por exemplo, ( file1.txt's são nomeados como match1.txt match2.txt match3.txt ):
#!/bin/sh
regex="^($(awk '{printf $0"|"}' $1) )+\$"
grep -E "$regex" $2