「sed」マジくそやべぇ!(おげれつ) 〜 メールヘッダーの「From:」からメアドだけを切り出すには?
procmailでメールを処理する時に、どうしてもメールヘッダーの「From:」行からメールアドレスだけを切り出す必要が出てきた。
よくよく考えると「From:」行は意外と複雑で、次の4パターンあることがわかった。
ケース1:From: address
ケース2:From: <address>
ケース3:From: 名前 <address>
ケース4:From: address (コメント)
普通に考えて、正規表現を使うことになる。javaやas3などのプログラミング言語でやるなら大したことはないけれど、procmailでas3は当然使えないし、javaを呼ぶなど重すぎるし、perlも何か違う気がする。何とかコマンドラインツールだけでやりたい・・・と思いあぐねていたところ「sed」を思い出した。
「sed」は知ってはいたものの、一度も使ったことがなかった。しかし恐らく、今回はコレしかない。こちらを参考に、何とかやってみることにした。
【 文字列を置換する「sed」 】 - シェル・スクリプト・リファレンス:ITpro
ケース1はprocmailで普通に切り出せるのでOK。
ケース2とケース3はこうした。
「sed」マジやべぇ!くそやべぇ!マジくそやべぇ!
やっぱりUNIXのコマンドラインツールはシンプルで柔軟で強力だなぁ。ソフトウェアの鏡だ。
よくよく考えると「From:」行は意外と複雑で、次の4パターンあることがわかった。
ケース1:From: address
ケース2:From: <address>
ケース3:From: 名前 <address>
ケース4:From: address (コメント)
普通に考えて、正規表現を使うことになる。javaやas3などのプログラミング言語でやるなら大したことはないけれど、procmailでas3は当然使えないし、javaを呼ぶなど重すぎるし、perlも何か違う気がする。何とかコマンドラインツールだけでやりたい・・・と思いあぐねていたところ「sed」を思い出した。
「sed」は知ってはいたものの、一度も使ったことがなかった。しかし恐らく、今回はコレしかない。こちらを参考に、何とかやってみることにした。
【 文字列を置換する「sed」 】 - シェル・スクリプト・リファレンス:ITpro
ケース1はprocmailで普通に切り出せるのでOK。
ケース2とケース3はこうした。
# echo "<foo@bar.co.jp>" | sed -e "s/.*<\(.*\)>.*/\1/g" foo@bar.co.jp # echo "=?ISO-2022-JP?B?GyRCJWElIiVJGyhC?= <foo@bar.co.jp>" | sed -e "s/.*<\(.*\)>.*/\1/g" foo@bar.co.jpケース4はこうした。
# echo "foo@bar.co.jp (Tekito Comment)" | sed -e "s/\(^.*\) (.*)/\1/g" foo@bar.co.jpなんと!プログラムを書かなくても、たったこれだけの文字数で目的を果たせるではないか!
「sed」マジやべぇ!くそやべぇ!マジくそやべぇ!
やっぱりUNIXのコマンドラインツールはシンプルで柔軟で強力だなぁ。ソフトウェアの鏡だ。
情報ありがとうございます。う~ん、シンプルですねぇ。エレガントだ。
返信削除