this is what i use:
cpue% cat bin/rc/mgrep
#! /bin/rc
if (test ($#* -lt 1) -o ($#* -gt 2)) {
echo 'usage: mgrep [from] regex'
exit
}
if (test ! -d /mail/fs/mbox) {
echo '/mail/fs/mbox does not exist'
exit
}
if (~ $#* 1) {
grep $1 /mail/fs/mbox/*/body
exit $?
}
for (i in `{grep $1 /mail/fs/mbox/*/from}) {
d=`{basename -d $i}
if (grep $2 $d/body) {
echo $d
}
}
also, i just looked at Mg. i'm not sure why i would do 'Mg foo bar
baz' when i can do grep '(foo|bar|baz)'
> A few days ago, someone in #plan9 asked how to search for all
> messages with a certain string in Acme Mail. The provided answer
> was "grep(1)", which has the advantage of being concise and
> maybe nominally correct, but the disadvantage of being totally
> useless as a practical answer.
>
> Today I found myself needing the same thing again, so I wrote Mg.
> I can't remember who wanted this, and it might be more widely
> useful, so I've put it at /n/sources/contrib/anothy/bin/rc/Mg. It's
> intended to be put in an Acme Mail tag line and invoked as
> Mg foo bar
> although all it really cares about is being run from within a
> /mail/fs/foo directory. For each argument, it will search the
> subject and body of every message in that mailbox and ask the
> plumber to open any matching messages.
>
> Right now it does no error checking, always folds case, checks
> body and subject always/only, has been only trivially tested, and
> I'm somewhat skeptical of the multipart handling, but it's already
> saved me more time than it took to write (which, except for the
> suspect multipart handling, was less than the time it took to write
> this note).
>
> Mg depends on Dan Cross' 'walk' (/n/sources/contrib/cross/walk.c).