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

その結果、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>

関連情報