約4000のテキストファイルを含むフォルダがあり、各ファイルには電子メールと件名が含まれています。フォルダ内のすべてのファイルを1つのファイルに変換したいが、これを.mbox
行うには、From
ファイルの最初の行に各電子メールのヘッダーが必要です。
awk
これを行うには、orのようなものを使うべきだと思いますが、sed
どうすればいいかわかりません。これを行う方法について提案やガイドがある人はいますか?
答え1
メールIDをファイルのヘッダーまたは最初の行として使用するには、次のコマンドを使用して同じ結果を得ます。
find . -type f -iname "*.txt" -exec sed '1i emailid' {} \;
上記のコマンドは、.txt形式のすべてのファイルの最初の行に電子メールIDを挿入します。
答え2
ファイルを繰り返し見ることができ、Edを使う。コマンドは次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