2013-01-07 30 views
0

我在搜索和存儲文件的特定部分到bash shell中的變量有問題。搜索和存儲文件的特定部分

這是我的文件中的一個樣本:

From [email protected] Mon Jan 7 16:56:50 2013 
Return-Path: <[email protected]> 
X-Original-To: [email protected] 
Delivered-To: [email protected] 
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: [email protected] 
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: <[email protected]> 
From: [email protected] (root) 

My note .. 
blah blah ... 

我需要做的是保存一些場爲變量(參數一樣發件人,主題和EMAIL BODY)

爲FROM和SUBJECT字段很容易搜索和獲取數據。 但是對於EMAIL BODY,正如你所看到的,沒有任何標籤可以搜索它......所以我在想一種可能的方式來讓電子郵件正文搜索FROM標籤,然後使用其行號來獲取EMAIL BODY從下一行到文件結束。

遺憾的是我沒那麼熟悉Linux命令做這樣的事情。

請幫幫我。

回答

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 
0

另一種方式來解決這個問題是尋找第一個空行(發生之後的「發件人:」行,你說說),之後打印的一切。您可以使用awk並設置空記錄分隔符來執行此操作。例如:

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

然而,上述的優點/問題是,空行將被丟棄。如果這是不可取的,這裏是應該滿足的方法:

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

然後:

echo "$BODY" 

結果:

My note .. 
blah blah ...