メールに関する問題が発生しています。
[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
その結果、someone1 からのすべてのメールを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/.//
その行で置換を実行します (1 文字だけを置き換えます)...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>