muttに特定のヘッダーの最後のインスタンスのみを表示させるにはどうすればよいですか?
ge UCEメッセージやフィッシングメッセージなど、ほとんどの場合、複数の「Received:」行のうち最後の(または最も古い)行は、メッセージソースに関する重要な情報です。 muttに"Received:"ヘッダーの最後のインスタンスのみを表示させる方法はありますか?
答え1
使用できるフィルタ表示:
3.54 ディスプレイフィルタ
タイプ:パス
デフォルト:(空)設定したら、メッセージをフィルタリングするために使用されるコマンドを指定します。メッセージを見ると、標準入力として$ display_filterに渡され、フィルタリングされたメッセージは標準出力から読み取られます。
これには、標準入力からメッセージを読み取り、それに応じて「Received」ヘッダーをフィルタリングするための別のコマンドが必要です。例えば。
$ 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