从 2 个文本文件中摘录块并通过管道传输到另一个实用程序

excerpt block from 2 text files and pipe to another utility

我正在尝试从 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 来分隔我需要的块,并允许我从每个文件中删除那几行。如果我只尝试从一个文件而不是两个文件中删除,我的任务可能会更容易 and/or。但是由于包含我所访问内容的网页需要输入登录凭据,并且因为我正在尝试自动执行此过程,所以我使用 lynx 的 cmd_script 选项首先登录,然后保存(打印到-文件,实际上)我需要的页面。据我所知,lynx 没有提供任何方式来连接文件,所以我似乎无法处理两个单独的文件。

肯定有其他方法可以实现我的目标,而且我不受偏好或必要性的限制,只能使用任何特定的实用程序。唯一真正的限制是,因为我正在尝试自动执行此操作,所以它是作为我可以作为 cron 作业调用的脚本来完成的。我正在使用 Linux 并拥有所有标准的文本操作工具。很明显,我的脚本 knowledge/abilities 非常有限,所以我一直在尝试使用单行代码来实现我的目标。 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