从2个文本文件中提取块,并通过管道连接到另一个实用程序



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

我已经达到了我想要使用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输出到stdout的目的,即我想要进入电子邮件正文的内容。但是,由于我不完全清楚的原因,将所述内容管道发送到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已正确配置并在此系统上运行。

管道仅适用于&&列表中的第一个命令。您需要将两者组合成一个单个复合命令,该命令的输出通过管道传输到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

最新更新