如何使 mutt 仅显示特定标头的最后一个实例。
在许多情况下,例如 ge UCE 消息或网络钓鱼消息,几个“已接收:”行中的最后(或最旧)行是了解邮件来源的重要信息。有没有办法让 mutt 仅显示“Received:”标头的最后一个实例?
答案1
你可以使用显示过滤器:
3.54 显示过滤器
类型:路径
默认值:(空)设置后,指定用于过滤消息的命令。当查看消息时,它会作为标准输入传递给 $display_filter,并从标准输出中读取过滤后的消息。
这需要一些其他命令可以从标准输入读取消息并相应地过滤“已接收”标头。例如。
$ cat last-rec.sed
0,/^$/{ # only process headers
:hdr
/^Received:/{
h # overwrite any previous Received line
:fold
# read next line without printing current
N
s/^.*\n//
/^[[:space:]]/{
H # append to current Received line
b fold
}
b hdr
}
/^$/{
# show final received line
x
p
# and the empty line
x
}
}
(这会产生副作用,将剩余的Received:
行移到所有其他标头下方。)
然后将其设置为muttrc
:
set display_filter="sed -f /path/to/last-rec.sed"
答案2
这是另一个建议,它使标题保持原始顺序:
set display_filter="tac | awk '$1 !~ /^Received:.*$/ { print $0; next }; !a["/^Received:.*$/"]++ { print $0 }' | tac"
简短说明:$1 !~ /^Received:.*$/
按原样输出所有不以“Received:”开头的行。!a["/^Received:.*$/"]++
是著名!a[$0]++
命令的变体,它删除重复项,同时tac
打印最后一个重复项。