이메일의 MIME 소스에서 헤더를 추출하는 bash 스크립트가 있습니다. 아이디어는 메시지의 헤더만 캡처하고 다른 것은 캡처하지 않는다는 것입니다. 그러나 그것은 제대로 작동하지 않습니다.
나는 그것이 다음을 수행하기를 원합니다 :
1) 이메일 상단부터 시작하세요.
2) "From"으로 시작하는 부분만 분리합니다(내 특정 업스트림 메일 서버는 항상 이것을 포함하는 줄로 헤더를 시작합니다).
3) 그 아래의 모든 줄을 캡처하십시오.첫 번째선을 넘어라.
4) 이메일의 나머지 부분에서 내용을 캡처하지 마세요.
이 sed 패턴을 사용하면 가능하다고 생각합니다.sed -n "/From/,/^$/p"
불행하게도 "From"의 다른 인스턴스에서 트리거됩니다. 예를 들어 누군가 다음 내용이 포함된 메시지를 전달하는 경우:
---------- Forwarded message ----------
From: Newsletter <[email protected]>
Date: Wed, Jan 28, 2015 at 9:16 PM
Subject: Blargenflugent
To: [email protected]
sed가 첫 번째 개행 문자 뒤의 내용을 무시하도록 만드는 방법은 무엇입니까?
답변1
sed '/From/,$!d;/./!q' <infile
...위 표현식은 sed
마지막 행의 범위에 속하지 않는 출력에서 모든 행을 제거 하도록 지시합니다 d
. 줄을 삭제할 때마다 스크립트 읽기를 중지하고 맨 위에서 다음 입력 줄을 시작하므로 다음 명령을 읽지 않습니다.!
/From/
$
d
따라서 /./!q
uit 명령은 uits 입력이 입력에서 최소한 단일 문자를 포함하지 않는 첫 번째 항목 이후 첫 번째 행에만 입력됨을 의미 sed
합니다 q
.From
!
.
답변2
sed -n '/From/!p;/From/{s/From/foo/;p;: rest; n; p; b rest;}' file