使 mutt 仅显示标头的一个实例

使 mutt 仅显示标头的一个实例

如何使 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打印最后一个重复项。

相关内容