Следующий сценарий компилирует file1.txt
в одно регулярное выражение для grep -E
.
#!/bin/sh
regex="^($(awk '{printf $0"|"}' $1) )+\$"
grep -E "$regex" $2
Использование:
$ ./script.sh file1.txt file2.txt
SORTED_RECIPS HFILTER_HELO_5
$ regex
компилируется из file1.txt
следующим образом:
^(ME_HTML_ONLY|SUSPICIOUS_RECIPS|SORTED_RECIPS|HFILTER_HELO_5| )+$
Для тысяч file1.txt
и file2.txt
с миллионами строк, было бы лучше скомпилировать все file1.txt
в одну программу awk с помощью следующего сценария:
#!/bin/sh
for i; do
regex="^($(awk '{printf $0"|"}' $i) )+\$"
echo "/$regex/ { print \"$i: \"\$0 }"
done
Например ( file1.txt
называются match1.txt
match2.txt
match3.txt
):
$ ./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