从2个文本文件和管道到另一个实用程序

时间:2017-02-13 16:05:30

标签: bash sed mailx

我试图从2个文本文件中摘录一些内容,然后使用mailx程序将其作为电子邮件正文发送。我试图将此作为bash脚本,因为我在创建简单的bash脚本方面至少有一定的经验,因此在这方面有一些基本的知识。也就是说,我并不反对娱乐其他脚本选项,如perl / python / whatever。

我已经中途到了我想要使用sed:sed -e '1,/excerpt delimiter 1/d' -e '/excerpt delimiter 2/,$d' file1.txt && sed -e '1,/excerpt delimiter one/d' -e '/excerpt delimiter two/,$d' file2.txt输出到我想要进入电子邮件正文的内容。但是管道说mailx的内容不起作用,原因我并不完全清楚。也就是说sed -e '1,/excerpt delimiter 1/d' -e '/excerpt delimiter 2/,$d' file1.txt && sed -e '1,/excerpt delimiter one/d' -e '/excerpt delimiter two/,$d' file2.txt | mail -s excerpts me@mymail.me不会在电子邮件正文中发送两个sed命令的输出:它只发送最终sed命令的输出。我试图理解为什么会这样,并通过将两个sed命令的输出都输入电子邮件正文来解决问题。

进一步的背景。这两个文本文件包含许多行文本,实际上是我使用lynx浏览器的网页转储。我只需要每个文件中的几行代码块,所以我使用sed来分隔我需要的块,并允许我从每个文件中删除那几行。如果我试图从一个文件而不是两个文件中删除,我的任务可能会更容易和/或更简单。但是由于具有我之后内容的网页需要输入登录凭据,并且因为我正在尝试自动执行此过程,所以我使用lynx的cmd_script选项首先登录,然后保存(打印 - 实际上,我需要的页面。就我所知,lynx没有提供连接文件的任何方法,因此我似乎不得不使用两个单独的文件。

当然必须有其他方法来实现我的目标,我不会因为偏好或必要而使用任何特定的效用来约束。唯一真正的限制是,因为我试图自动执行此操作,所以它可以作为我可以作为cron作业调用的脚本来完成。我正在使用Linux并拥有所有标准文本操作工具。很明显,我的脚本知识/能力非常有限,所以我一直试图完成我的目标是使用单线程。 mailx已正确配置并在此系统上运行。

1 个答案:

答案 0 :(得分:0)

管道仅适用于&&列表中的第一个命令。您需要将两者合并为复合命令,其输出通过管道传送到mailx

{ sed -e '1,/excerpt delimiter 1/d' \ 
      -e '/excerpt delimiter 2/,$d' file1.txt &&
  sed -e '1,/excerpt delimiter one/d' \
      -e '/excerpt delimiter two/,$d' file2.txt ; } |
 mail -s excerpts me@mymail.me