약 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
하고 그 뒤에 아무거나 @
;가 오는 행을 찾도록 지시합니다. 해당 줄에서 m
ove 명령을 실행하고 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