シェルスクリプトについてもっと学ぼうとしていじっています。そのため、spamassassin がディレクトリに書き込む電子メールを含むファイルがいくつかあり、それらに対して正規表現マッチングを実行しようと考えました。そのため、異なる一致が必要なファイルを選択し、それらを並べ替えようとします。
私はこのスクリプトを書きました:
#!/usr/local/bin/bash
#
regex='(\.)?'
files="/var/spool/spam/testing/out.*"
for i in $files; do
domain=`cat $i | grep -i "Message-ID: <" | cut -d'@' -f2 | cut -d'>' -f1 | cut -d' ' -f1`
echo "Domain is $domain"
echo "We're starting the if loop"
if [ -z "$domain" ];
then
echo "Domain is empty"
echo $i
#rm $i
elif ! [[ "$domain" =~ $regex ]];
then
echo "There are no periods in the domainname $domain"
elif [[ $domain =~ $regex ]];
then
echo "There are periods in the domainname $domain"
fi
done
私が達成しようとしているのは、Message-ID: のドメイン部分を分離し、そのドメインが何であるかを判断することです。一部のメッセージ ID にはドメインがまったくありません。偽のドメインを持つものもあります。yahoo.co.uk のようなドメインを持っているものもあります。
すべてのメッセージには 2 つの Message-ID: エントリがあるため、ドメイン名が 2 回表示されることになります。
このスクリプトを 2 つのファイルに対して実行すると、次の結果が得られます。
# bash /usr/local/bin/rm-bounces.sh
Domain is xbfoqrka
xbfoqrka
We're starting the if loop
There are periods in the domainname xbfoqrka
xbfoqrka
Domain is SKY-20150201SFT.com
SKY-20150201SFT.com
We're starting the if loop
There are periods in the domainname SKY-20150201SFT.com
SKY-20150201SFT.com
私が理解していないのは、xbfoqrka がドメイン名にピリオドを見つけるはずの正規表現と一致するが、ドメイン名にピリオドがないことを検索する正規表現と一致しない理由です。ピリオドをエスケープしているので、完全に一致する必要があり、xbfoqrka xbfoqrka にはピリオドがありません。