Sed/Awk는 문자열이 포함된 경우 패턴 사이에 텍스트를 저장합니다.

Sed/Awk는 문자열이 포함된 경우 패턴 사이에 텍스트를 저장합니다.

메일 관련 문제가 있습니다. [email protected]와 2명 사이의 모든 메시지를 받아야 합니다 [email protected].

:file

From: [email protected]
to: [email protected]
<body of the message1>

From: [email protected]
to: [email protected]
<body of the message1>

From: [email protected]
to: [email protected]
<body of the message1>

From: [email protected]
to: [email protected]
<body of the message1>

From: [email protected]
to: [email protected]
<body of the message1>

나는 다음을 사용하려고했습니다 sed:

sed -n "/From: [Ss]omebody1/,/From: /p" inputfile > test.txt

그 결과 나는 누군가1로부터 모든 메일을 test.txt파일로 받았습니다.

sed질문은: someone1과 person 간에 메일만 받으려면 어떤 구조를 갖춰야 합니까 ?

답변1

와 함께 sed:

sed -n '/^From: [email protected]/{h;n;/^to: [email protected]/{H;g;p;:x;n;p;s/.//;tx}}' file

  • /^From: [email protected]/From:: 먼저 이메일 주소를 검색하세요.
    • h;해당 라인을 보류 공간에 저장하십시오.
    • n;다음 라인( to:라인)을 로드합니다.
  • /^to: [email protected]/to:: 이메일 주소를 검색하세요
    • H;해당 줄을 보류 공간에 추가하세요.
    • g;홀드 공간을 패턴 공간에 복사합니다.
    • p;패턴 공간을 인쇄합니다.
    • :x;라는 라벨을 설정하세요 x.
    • n;다음 줄(이메일 본문) 로드
    • p;그 줄을 인쇄하세요.
    • s/.//해당 줄에서 대체를 수행합니다(단지 한 문자만 대체)...
    • tx... t해당 대체가 성공했는지 명령이 확인할 수 있습니다(이메일 본문 끝과 같이 행이 비어 있지 않은 경우). 그렇다면 레이블로 돌아가서 x빈 줄이 나타날 때까지 반복하고, 그렇지 않으면 스크립트 끝으로 이동합니다.

출력:

From: [email protected]
to: [email protected]
<body of the message1>

From: [email protected]
to: [email protected]
<body of the message1>

답변2

awk로:

awk '/From: [Ss]omebody1/{flag=1;next} \
  /to\: person1/ {if (flag>0) {flag=2; print; next} else {flag=0; next}} \
 /From/{flag=0} {if (flag==2){print NR,flag, $0}} ' input.txt 
  • /From: [Ss]omebody1/{flag=1;next} \일치 시 플래그 변수를 1로 설정하고 해당 줄을 건너뜁니다.
  • /to\: person1/ 플래그가 1이면 2로 업데이트하고, 그렇지 않으면 0으로 재설정합니다.
  • /From/{flag=0} 일치하면 플래그 값이 재설정됩니다.
  • {if (flag==2){print NR, $0}}플래그가 2이면 다음을 인쇄합니다.줄번호그리고 라인.

person1다른 일치 항목을 가지려면 값을 변경하십시오 .

사용된 입력 파일

From: [email protected]
to: [email protected]
<body of the message1>

From: [email protected]
to: [email protected]
<body of the message2>

From: [email protected]
to: [email protected]
<body of the message3>

From: [email protected]
to: [email protected]
<body of the message4>

From: [email protected]
to: [email protected]
<body of the message5>

관련 정보