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