【问题标题】:searching and storing specific part of file搜索和存储文件的特定部分
【发布时间】:2013-01-07 14:06:44
【问题描述】:

我在搜索文件的特定部分并将其存储到 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)

对于 FROM 和 SUBJECT 字段,搜索和获取数据很容易。 但是对于 EMAIL BODY,正如您所看到的,没有任何标签可以搜索它......所以我在想获取电子邮件正文的一种可能方法是搜索 FROM 标签,然后使用其行号从中获取 EMAIL BODY下一行到文件末尾。

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

请帮助我。

【问题讨论】:

    标签: linux string file shell search


    【解决方案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
    

    【讨论】:

      【解决方案2】:

      解决问题的另一种方法是查找第一个空行(出现在您所说的“发件人:”行之后),然后打印所有内容。您可以使用awk 并设置空记录分隔符来执行此操作。例如:

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

      但是,上面的优点/问题是空白行将被丢弃。如果这是不可取的,这里有一个应该满足的方法:

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

      然后:

      echo "$BODY"
      

      结果:

      My note ..
      blah blah ...
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-04-13
        • 2021-04-24
        • 2015-08-15
        • 1970-01-01
        • 2018-11-23
        • 1970-01-01
        • 2018-07-26
        相关资源
        最近更新 更多