0

ファイルの特定の部分を検索して bash シェルの変数に保存する際に問題が発生しました。

ここに私のファイルのサンプルがあります:

From root@machine2.com  Mon Jan  7 16:56:50 2013
Return-Path: <root@machine2.com>
X-Original-To: smsto+9121403571@machine2.com
Delivered-To: smsto+9121403571@machine2.com
Received: by machine2.com (Postfix, from userid 0)
        id 43C191A1ECE; Mon,  7 Jan 2013 16:56:50 +0330 (IRST)
Date: Mon, 07 Jan 2013 16:56:50 +0330
To: smsto+9121403571@machine2.com
Subject: =?us-ascii?Q?Testing\=08?=
User-Agent: Heirloom mailx 12.5 7/5/10
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Message-Id: <20130107132650.43C191A1ECE@machine2.com>
From: root@machine2.com (root)

My note ..
blah blah ...

私がする必要があるのは、これらのフィールドのいくつかを変数に保存することです(FROM、SUBJECT、EMAIL BODYなどのパラメーター)

FROM および SUBJECT フィールドの場合、データを検索して取得するのは簡単でした。しかし、メール本文の場合、検索するラベルがないことがわかります...だから、メール本文を取得する可能な方法の1つは、FROMラベルを検索し、その行番号を使用してメール本文を取得することだと考えていました次の行からファイルの終わりまで。

残念ながら、私はそのようなことを行うためのLinuxコマンドに精通していません。

私を助けてください。

4

2 に答える 2

1

sed空白行からファイルの最後まで印刷するために使用できます。

$ sed -n '/^\s*$/,$p' file

My note ..
blah blah ...

# Command substitution to store into a variable  
$ body=$(sed -n '/^\s*$/,$p' file)

$ echo $body
My note .. blah blah ...

# Remember to quote variables to respect newlines
$ echo "$body"

My note ..
blah blah ...

最初の空白行を含めたくない場合は、次を使用します。

$ sed -n '/^\s*$/,$ {/^.*[^ ]\+.*/,$p}' file

または、本文の空白行をすべて削除します。

$ sed -n '/^\s*$/,$ {/^.*[^ ]\+.*/p}' file
于 2013-01-07T14:18:41.000 に答える
0

この問題に対処する別の方法は、最初の空の行 (あなたが話している「From:」行の直後に発生します) を探し、その後のすべてを出力することです。awkこれは、ヌル レコード セパレータを使用および設定して行うことができます。例えば:

BODY=$(awk 'NR>1' RS= file)

ただし、上記の利点/問題は、空白行が破棄されることです。これが望ましくない場合は、次の方法で満たす必要があります。

BODY=$(awk 'i==1; /^$/ { i=1 }' file) 

それで:

echo "$BODY"

結果:

My note ..
blah blah ...
于 2013-01-07T14:17:11.247 に答える