mutt가 헤더의 한 인스턴스만 표시하도록 설정

mutt가 헤더의 한 인스턴스만 표시하도록 설정

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

관련 정보