패턴과 일치하는 줄을 파일 맨 위로 이동(여러 파일)

패턴과 일치하는 줄을 파일 맨 위로 이동(여러 파일)

약 4000개의 텍스트 파일이 있는 폴더가 있는데 각 파일에는 이메일과 제목이 포함되어 있습니다. 폴더의 모든 파일을 하나의 파일로 변환하고 싶지만 .mbox이렇게 하려면 From파일의 첫 번째 줄에 각 이메일의 헤더가 필요합니다.

awk이 작업을 수행하려면 or 같은 것을 사용해야 한다고 생각하는데 sed어떻게 해야 할지 모르겠습니다. 이 작업을 수행하는 방법에 대한 제안이나 가이드가 있는 사람이 있습니까?

답변1

이메일 ID를 파일의 헤더 또는 첫 번째 줄로 사용하려면 다음 명령을 사용하여 동일한 결과를 얻으세요.

find . -type f -iname "*.txt"  -exec sed  '1i emailid' {} \;

위 명령은 .txt 형식의 모든 파일의 첫 번째 줄에 이메일 ID를 삽입합니다.

답변2

파일을 반복해서 볼 수 있고에드를 사용하세요. 명령은 다음 ed과 같습니다:

ed -s input <<< $'/^From .*@/m0\nw\nq'

input이는 스크립트 모드( )에서 명명된 파일을 편집하여 -s저장 및 종료 시 바이트 인쇄를 억제합니다. 여기의 문자열은 <<< $' ... '명령을 ed표준 입력으로 보냅니다. 이 명령은 ed에게 문자열로 시작 From하고 그 뒤에 아무거나 @;가 오는 행을 찾도록 지시합니다. 해당 줄에서 move 명령을 실행하고 0번 줄 뒤에 배치하여 새로운 첫 번째 줄로 만듭니다. 그런 다음 w파일을 다시 디스크에 쓰고 q종료합니다.

남은 것은 쉘 와일드카드와 루프를 사용하여 파일을 반복하는 것입니다 for.

for file in ./*.txt
do
  ed -s "$file" <<< $'/^From .*@/m0\nw\nq'
done

이렇게 하면 파일이 그 자리에서 편집되므로 결과에 만족할 때까지 백업 복사본을 작업하세요.

/^From .*@/데이터가 이를 지원하는 경우 날짜 문자열에 대한 요구 사항이나 이메일 주소에 특정 수의 하위 도메인에 대한 요구 사항 등을 추가하여 정규식 검색 패턴을 강화할 수 있습니다.

자세한 내용은 ed설치 후 man ed또는 를 실행 info ed하거나 확인하세요.ed의 온라인 매뉴얼 페이지.

답변3

@Kusalananda에게 감사드립니다. 성공적으로 사용되었습니다 formail.

cat `find . -type f -name '*' -print` | formail -es > ../result.mbox

관련 정보