Linux 管道尾部-f切割至sed不会产生任何输出
我尝试使用以下命令在终端中显示命名管道:Linux 管道尾部-f切割至sed不会产生任何输出,linux,shell,sed,cut,tail,Linux,Shell,Sed,Cut,Tail,我尝试使用以下命令在终端中显示命名管道: tail-f textFile | cut-d”“-f3-| sed-e“s/a/g&g/” 出于某种原因,这不会产生任何输出 如果删除-f,则它会按预期工作: tail textFile | cut-d”“-f3-| sed-e“s/a/g&g/” 或者删除cut语句: tail-f textFile | sed-e“s/a/g&g/” 或删除sed语句: tail-f textFile | cut-d”“-f3- 只有当这三样东西同时存在时,它才会突
tail-f textFile | cut-d”“-f3-| sed-e“s/a/g&g/”
出于某种原因,这不会产生任何输出
如果删除-f,则它会按预期工作:
tail textFile | cut-d”“-f3-| sed-e“s/a/g&g/”
或者删除cut语句:
tail-f textFile | sed-e“s/a/g&g/”
或删除sed语句:
tail-f textFile | cut-d”“-f3-
只有当这三样东西同时存在时,它才会突然不再产生任何输出。sed和cut的顺序没有区别。所有这些使我很难责怪任何一个或两个程序的输入或输出缓冲行为
获取所需功能的一个可能解决方案是一个
while read line
结构,但如果可能的话,我希望避免为每一行初始化一个命令。我遇到了与我想要过滤的ping命令类似的问题
下面的网页似乎解释了问题所在(stdio缓冲)
该网站指出了一个解决方案,其中包括使用“stdbuf”命令禁用缓冲
上述方法对我来说效果很好,删除“stdbuf-o0”会导致不显示输出
>stdbuf --help
Usage: stdbuf OPTION... COMMAND
Run COMMAND, with modified buffering operations for its standard streams.
Mandatory arguments to long options are mandatory for short options too.
-i, --input=MODE adjust standard input stream buffering
-o, --output=MODE adjust standard output stream buffering
-e, --error=MODE adjust standard error stream buffering
--help display this help and exit
--version output version information and exit
提供
文本文件
中的示例行,以调查原因!这真的没关系。出于测试目的,我正在使用一个文本文件,其内容为:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;做回显“$text”| cut-d”“-f3-| sed-e”s/a/g&g/;done
。因为,我想这是tail
和cut
分别处理其输出和输入流的方式,我想!如果有效,将作为答案发布(如果添加缺少的)但是我已经在我的原始帖子中解释了为什么我宁愿避免这个解决方案。你提到的那篇文章提到使用-oL
实现面向行的吞吐量(tail-and-cut-products,afaik)你为什么选择-o0
?
>stdbuf --help
Usage: stdbuf OPTION... COMMAND
Run COMMAND, with modified buffering operations for its standard streams.
Mandatory arguments to long options are mandatory for short options too.
-i, --input=MODE adjust standard input stream buffering
-o, --output=MODE adjust standard output stream buffering
-e, --error=MODE adjust standard error stream buffering
--help display this help and exit
--version output version information and exit