搜索和存储文件的特定部分



我在bash shell中搜索和存储文件的特定部分时遇到问题。

这是我的一个文件示例:

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)

for FROM和SUBJECT字段,很容易搜索和获取数据。但是对于EMAIL BODY,正如你所看到的,没有任何标签来搜索它…所以我在想一个可能的方法来获得电子邮件正文将搜索FROM标签,然后使用它的行号来获得电子邮件正文从下一行到文件结束。

不幸的是,我不太熟悉linux命令来做这样的事情。

请帮帮我。

您可以使用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

解决这个问题的另一种方法是查找第一个空行(出现在您谈论的'From:'行之后)并打印其后的所有内容。您可以使用awk并设置空记录分隔符来实现这一点。例如:

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

然而,上面的优点/问题是空行将被丢弃。如果不希望这样,下面的方法应该满足:

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

:

echo "$BODY"

结果:

My note ..
blah blah ...

相关内容

  • 没有找到相关文章

最新更新