一种脚本方式,通过避免=符号自动断开长行逐行读取电子邮件

时间:2017-04-03 10:26:28

标签: linux bash email

我正在使用getamil来检索电子邮件。 我在“〜/ bak / mail”下有一个名为“new”的目录,电子邮件将发送到该目录。 我收到的每封新电子邮件都是在“〜/ bak / mail / new”目录下以“.ubuntu”扩展名创建的。

当我只是“捕捉”每个文件时,它没有正确显示,因为它有各种标题等。 例如: Delivered-To:,Received:,Authentication-Results:等。

我并不关心正确解析标题,但更关心使用等号字符(=)打破长行的事实。 因此,原始邮件中根本没有等号的行如下所示:

you have received this email message since you are subscribed to the public group=

 "Customers" public group.

逐行浏览文件或“cat”shell中的文件,而不是

you have received this email message since you are subscribed to the public group "Customers" public group.

出现在邮件客户端中。

我正在编写一个脚本,我正在手动解析文件,但是我希望将该行视为没有=符号的行,因此逐行读取文件并不能解决问题。 “文件......因为在这些方面我会遇到以=符号终止的较短行。

如何在脚本中逐行检查这样的电子邮件文件,但是将行看作是实线,而不是用=符号?

感谢。

1 个答案:

答案 0 :(得分:0)

不确定这是否正是您要查找的内容,但以下内容删除了以=

开头的换行符
cat test | sed ':a;N;$!ba;s/=\n/test/g'

对于旗帜等有一个很好的解释: http://www.canbike.org/information-technology/sed-delete-carriage-returns-and-linefeeds-crlf.html

*编辑:澄清它取代了换行符和'=',从字面上看,如果有空格则不行。如果有空格,您可以尝试:

cat test | sed ':a;N;$!ba;s/=[[:blank:]]*\n/ /g'

这将删除= =和中断之间任意数量的(并且只有)制表符/空格的'='。我怀疑有没有。