Thursday, October 20, 2011

mutt patten 搜索

2. 模式:搜索,提取和标记

Mutt中的许多命令允许你使用模式来匹配邮件(limittag-patterndelete-pattern,等等)。表4.4 “模式修饰符”给出了几种选择邮件的方式。
表4.4.模式修饰符
模式修饰符描述
~A所有邮件
~b EXPR正文中匹配EXPR的邮件
=b STRING正文包含STRING的邮件。如果启用了IMAP,将在服务器上执行搜寻STRING的工作,而不是下载每封邮件并在本地搜索。
~B EXPR在整个邮件中匹配EXPR的邮件
~c EXPR“Cc:”字段匹配EXPR的邮件
%c GROUPCc给GROUP成员的邮件
~C EXPR“To:”或“Cc:”字段匹配EXPR的邮件
%C GROUP发送或Cc给GROUP成员的邮件
~d [MIN]-[MAX]date-sent”匹配日期范围的邮件
~D已删除的邮件
~e EXPRSender”字段匹配EXPR的邮件
%e GROUPSender”字段包含Group成员的邮件
~E过期的邮件
~F标记为重要的邮件
~f EXPR来自EXPR的邮件
%F GROUP来自GROUP成员的邮件
~g使用密钥签名的邮件
~G使用密钥加密的邮件
~h EXPR邮件头匹配EXPR的邮件
~H EXPRspam attribute匹配EXPR的邮件
~i EXPRMessage-ID”字段匹配EXPR的邮件
~k包含PGP密钥的邮件
~L EXPREXPR发出或来自EXPR的邮件
%L GROUPGROUP成员发出或来自他们的邮件
~l寄给已知邮件列表的邮件
~m [MIN]-[MAX]MIN到MAX的邮件*)
~n [MIN]-[MAX]评分在MIN到MAX范围内的邮件*)
~N新邮件
~O旧邮件
~p发给你(参考后备地址)的邮件
~P由你(参考后备地址)发出的邮件
~Q已回复的邮件
~r [MIN]-[MAX]date-received”匹配日期范围的邮件
~R已读的邮件
~s EXPRSubject”字段匹配EXPR“的邮件。
~Ssuperseded messages
~t EXPR发给EXPR的邮件
~T被标记的邮件
~u寄给己订阅的邮件列表的邮件
~U未读邮件
~v折叠thread之中的邮件
~V已验证的邮件
~x EXPRReferences”字段匹配EXPR的邮件
~X [MIN]-[MAX]包含MIN到MAX个附件的邮件*)
~y EXPRX-Label”字段匹配EXPR的邮件
~z [MIN]-[MAX]大小介于MIN到MAX之间的邮件*)
~=重复的邮件(见$duplicate_threads)
~$未索引的邮件 (需要以thread方式排列)
~ (PATTERN)thread中所包含匹配PATTERN的邮件,例如,所有thread包含的来自你的邮件:~(~P)
上表中的EXPR是指正则表达式。在模式中使用正则表达式需要特别的注意。具体来说, Mutt对这些模式的解析将剥除一层反斜杠(“\”), 一般它用于引用。如果你打算在正则表达式中使用反斜杠,你就需要使用两个反斜杠(“\\”)。你可以强制mutt将模式中的EXPR看作一个简单的字符串而非正则表达式,使用“=”代替“~“。例如,“=b *.*”表示所有包含基本字符串“*.*“的邮件。简单字符串的匹配不如正则表达式强大,但它的效率更高。尤其是对IMAP文件夹,因为搜寻匹配字符串的工作可以在服务器上执行,而不需要获取每封邮件。特别地,IMAP对待“=h”:它的格式必须是“header: substring”,不会部份地匹配邮件头的字段名。如果你只想要简单地找出包含特定邮件头的邮件,而不关心其具体的值,那么可以省略“substring”。
*)也可以使用其它的一些形式,如“<[MAX]“,”>[MIN]”,“[MIN]-”和“-[MAX]”。

2.1.模式修饰符

注意

匹配地址列表的模式(尤其是c,C,p,P和t),如果整个地址列表中有一个地址匹配,那么这个模式就会匹配这封邮件。如果你想保证地址列表中的每一项都匹配的话,你需要在给模式加上前缀“^”。下面这个例子匹配所有只包含来自德国的收件人的邮件。
^~C \.de$

2.2.简单模式

Mutt中有两种所谓的“简单搜索”,当搜索或提取邮件时,如果给出的查询语句没有包含一个可用的操作符(即它不包含这些符号:“~”,“=“或”%“),查询也将会进行。如果要查询一个特殊字符,必须在特殊字符之前使用反斜杠(“\”)转义。
第一种是通过检查查询语句是否属于表4.5 “简单搜索关键词”所列出的关键字(大小写不敏感):如果是的话,Mutt使用关键字所对应的模式修饰符代替关键字。如果你要查询的内容和某个关键字有冲 突,你需要把它变成一个正则表达式,以避免和关键字一致。例如,如果你想查询所有匹配“flag”的邮件(使用$simple_search),而不是要查询被标记为重要的邮件,那么就要写成“[f]lag”。
表4.5.简单搜索关键词
关键字模式修饰符
all~A
.~A
^~A
del~D
flag~F
new~N
old~O
repl~Q
read~R
tag~T
unread~U
第二种简单搜索,是使用组合的模式搜索,利用$simple_search为模板。Mutt会你的查询字符串插入到模板中来执行搜索。

2.3.组合模式

指定一个以上的查询规则会执行逻辑与操作。例如:
~t mutt ~f elkins
将选择收件人列表包含“mutt”的,并且在“From:”字段包含“elkins”的邮件。
Mutt同样可以通过以下操作符达到更多的模式组合搜索:
  • ! -- 逻辑非操作符
  • | -- 逻辑或操作符
  • () -- 分组操作符
下面的例子可以说明组合模式搜索。这个例子将选择的所有“To:”或“Cc:”字段中不包含“mutt”,但来自“elkins”的邮件。
例4.1.模式匹配中使用布尔操作符
!(~t mutt|~c mutt) ~f elkins
下面这个例子在正则表达式中使用空白符(注意'和")。例子中,该邮件的主题必须匹配“^Junk +From +Me$”,它必须来自“Jim +Somebody”或“Ed +SomeoneElse”:
 '~s "^Junk +From +Me$" ~f ("Jim +Somebody"|"Ed +SomeoneElse")'

注意

如果正则表达式中包含括号,或管道符("|"),你必须将表达式放到双引号或单引号内,因为这些字符也被用来分隔不同的模式。例如:~f "me@(mutt\.org|cs\.hmc\.edu)"
没有引号,括号不会结束。它的作用是分离两个逻辑与的模式:˜f me@(mutt\.orgcs\.hmc\.edu)。这样总会产生错误的结果。

2.4.按日期搜索

Mutt支持两种类型的日期, 绝对的相对的
绝对的:日期的格式必须是日/月/年(月份和年份是可选的,默认为当前的月份和年份) 。例子,一个有效的日期范围是:
Limit to messages matching: ~d 20/1/95-31/10
如果你省略了开始日期,仅仅指定“-DD/MM/YY”,那么在指定日期之前的邮件将被选中。如果您省略了结束日期,指定的是“DD/MM/YY-”,那么所有在指定日期之后的邮件将被选中。如果你只指定了一个日期,而没有破折号(“-”),那么只有在指定日期发送的邮件将被选中。
偏差:您可以给绝对日期加上一个偏差值。偏差是由符号(+或-),后跟数字,最后加上表4.6所列出的时间单位构成的。你可以用“*”代替“+”或者“-”,这相当于同时使用了“+”或者“-”。
表4.6.日期单位
单位描述
y
m
w
d
例如:要选择2001年1月15号前后两周的邮件,你要使用以下的方式:
Limit to messages matching: ~d 15/1/2001*2w
相对的:这种类型相对于当前的日期,可以被指定为:
  • >offset(“offset单位”时间以前的邮件)
  • (“offset单位”时间之内的邮件)
  • =offset(“offset单位"时间当天的邮件)
offset为一个正数与表4.6 “时间单位”中所列的单位。
例如:选择1个月之内的邮件,你可以使用
Limit to messages matching: ~d <1m

注意

使用相对搜索时都是相对去本地时区,并非index上显示的日期,除非你将格式%[...]加入了$index_format变量。

No comments: