将sed输出重定向到stdin

时间:2017-12-12 12:30:05

标签: bash

我有一个文件,我目前发送的电子邮件是这样的

/usr/sbin/sendmail me@gmail.com < f1.txt

我对文件进行了一些更改,以便它包含一个占位符,我使用sed进行调整,如此

sed -e s/PLACEHOLDER/TEST/g f1.txt

我如何结合2?我以为它会像

那样完成
/usr/sbin/sendmail me@gmail.com <(sed -e s/PLACEHOLDER/TEST/g f1.txt)

但那'挂起'。有人能指出我正确的方向吗?

1 个答案:

答案 0 :(得分:7)

你差不多了。

您的命令行是:

/usr/sbin/sendmail me@gmail.com <(sed -e s/PLACEHOLDER/TEST/g f1.txt)

您正在使用 Process Substitution <( .. )构造中的sed命令转换为临时文件句柄,该句柄将由sendmail读取。不幸的是,您实际上并没有从该临时文件句柄重定向。

修复应该只是在命令替换之前添加<

/usr/sbin/sendmail me@example.com < <(sed -e 's/PLACEHOLDER/TEST/g' f1.txt)
                                  ↑

也就是说,最好使用PIPES,以避免对bash的依赖:

sed -e 's/PLACEHOLDER/TEST/g' f1.txt | /usr/sbin/sendmail me@example.com

最终的效果是相同的,但是这个过程稍微简单一些,并且可以移植到不支持进程替换的POSIX shell解释器。