(Unix)管道尾部-f到节日

时间:2013-09-14 02:04:36

标签: unix sed grep piping festival

我正在尝试将文件结尾的流(通过tail -f)发送到festival,这是一个文本到语音程序。 tail -f ./filename | festival --tts 可以正常使用。

这是我的问题: 我想改变来自tail -f的流,以便节日可以更好地合成它,并避免它说出整个时间戳。我知道像sed和grep这样的程序可以做到这一点。不幸的是 tail -f ./filename | sed's /:/ say /'| festival --tts 不会输出任何声音。

是的,我检查了 tail -f ./filename | sed's /:/ say /'输出任何东西,它就可以了。

我也用grep尝试了这个,在编辑完流后,我无法让 festival --tts 说出任何内容。

任何允许对我的信息流进行编辑,然后说出来的内容都会受到欢迎,我不会受到sed和grep的束缚。

1 个答案:

答案 0 :(得分:0)

tail -f本身不起作用,因为节日在输出音频之前等待输入流关闭。使用tail -f作为输入时,输入流将永远不会关闭。

但是,您可以使用bash read命令打破尾部输出,通过grep运行它,并使用如下脚本在单独的进程中将其传递给festival:

tail -f ./filename | grep something |  while read line; do 
  echo "$line" | festival --tts
done

如果你的grep过滤器没有返回太多数据,那么在grep缓冲区填充和刷新之前需要一些时间。要减小grep缓冲区的大小,请使用grep --line-buffered something。 sed具有类似的缓冲功能,您可以使用sed中的-u(无缓冲)选项来禁用它们。