pick - search for messages by content


...] [-public | -nopublic] [-zero | -nozero] [-list | -nolist] [-version] [-help]

typical usage:

scan `pick -from jones` pick -to holloway -sequence select show `pick -before friday`



A modified grep(1) is used to perform the matching, so the full regular expression (see ed(1)) facility is available within pattern. With -search, pattern is used directly, and with the others, the grep pattern constructed is:

`component[ \t]*:.*pattern'

This means that the pattern specified for a -search will be found everywhere in the message, including the header and the body, while the other pattern matching requests are limited to the single specified component. The expression

`--component pattern'

is a shorthand for specifying


It is used to pick a component which is not one of "To:", "cc:", "Date:", "From:", or "Subject:". An example is "pick --reply-to pooh".

Pattern matching is performed on a per-line basis. Within the header of the message, each component is treated as one long line, but in the body, each line is separate. Lower-case letters in the search pattern will match either lower or upper case in the message, while upper case will match only upper case.

Note that since the -date switch is a pattern matching operation (as described above), to find messages sent on a certain date the pattern string must match the text of the "Date:" field of the message.

Independent of any pattern matching operations requested, the switches -after date or -before date may also be used to introduce date/time constraints on all of the messages. By default, the "Date:" field is consulted, but if another date yielding field (such as "BB-Posted:" or "Delivery-Date:") should be used, the -datefield field switch may be used.

With -before and -after, pick will actually parse the date fields in each of the messages specified in `msgs' and compare them to the date/time specified. If -after is given, then only those messages whose "Date:" field value is chronologically after the date specified will be considered. The -before switch specifies the complimentary action.


In addition to 822-style dates, pick will also recognize any of the days of the week ("sunday", "monday", and so on), and the special dates "today", "yesterday" (24 hours ago), and "tomorrow" (24 hours from now). All days of the week are judged to refer to a day in the past (e.g., telling pick "saturday" on a "tuesday" means "last saturday" not "this saturday").

Finally, in addition to these special specifications, pick will also honor a specification of the form "-dd", which means "dd days ago".


pick -after yesterday -and -lbrace -from freida -or -from fear -rbrace



If no search criteria are given, all the messages specified on the command line are selected (this defaults to "all").

Once the search has been performed, if the -list switch is given, the message numbers of the selected messages are written to the standard output separated by newlines. This is extremely useful for quickly generating arguments for other nmh programs by using the "backquoting" syntax of the shell. For example, the command


says to scan those messages in the indicated folder which meet the appropriate criterion. Note that since pick's context changes are written out prior to scan's invocation, you need not give the folder argument to scan as well.


pick -from frated -seq fred

defines a new message sequence for the current folder called "fred" which contains exactly those messages that were selected.




$HOME/.mh_profile The user profile


Path: To determine the user's nmh directory Current-Folder: To find the default current folder




`+folder' defaults to the current folder `msgs' defaults to all `-datefield date' `-zero' `-list' is the default if no `-sequence', `-nolist' otherwise




In previous versions of MH, the pick command would show, scan, or refile the selected messages. This was rather "inverted logic" from the UNIX point of view, so pick was changed to define sequences and output those sequences. Hence, pick can be used to generate the arguments for all other MH commands, instead of giving pick endless switches for invoking those commands itself.


show `pick last:20 -seq fear`

instead of typing

mark -add -nozero -seq fear last:20 show fear

Finally, timezones used to be ignored when comparing dates: they aren't any more.


Use "pick sequence -list" to enumerate the messages in a sequence (such as for use by a shell script).


The argument to the -after and -before switches must be interpreted as a single token by the shell that invokes pick. Therefore, one must usually place the argument to this switch inside double-quotes. Furthermore, any occurrence of -datefield must occur prior to the -after or -before switch it applies to.


scan `pick -from jones`

and pick selects no messages (e.g., no messages are from "jones"), then the shell will still run the outer command (e.g., scan). Since no messages were matched, pick produced no output, and the argument given to the outer command as a result of backquoting pick is empty. In the case of nmh programs, the outer command now acts as if the default `msg' or `msgs' should be used (e.g., "all" in the case of scan). To prevent this unexpected behavior, if -list was given, and if its standard output is not a tty, then pick outputs the illegal message number "0" when it fails. This lets the outer command fail gracefully as well.

The pattern syntax "[l-r]" is not supported; each letter to be matched must be included within the square brackets.