linux - 管道 tail -f 切割到 sed 不产生任何输出

标签 linux shell sed cut tail

我尝试使用以下命令在终端中显示命名管道:

tail -f 文本文件 |剪切-d“”-f 3- | sed -e "s/a/g&g/"

出于某种原因,这不会产生任何输出。

如果删除 -f,它确实会按预期工作:

尾部文本文件 |剪切-d“”-f 3- | sed -e "s/a/g&g/"

或者删除cut语句:

tail -f 文本文件 | sed -e "s/a/g&g/"

或者删除sed语句:

tail -f 文本文件 |剪切-d ""-f 3-

只有当所有这三个东西都在一起时,它突然不再产生任何输出。 sed 和 cut 的顺序没有区别。所有这些让我很难责怪任何一个或一对这些程序的输入或输出缓冲行为。

获得所需功能的可能解决方案是 while read line 结构,但我想尽可能避免为每一行初始化命令。

最佳答案

我遇到了与我想过滤的 ping 命令类似的情况。

以下网页似乎解释了问题所在(stdio 缓冲) http://www.pixelbeat.org/programming/stdio_buffering/

该网站指出了一个解决方案,该解决方案涉及使用“stdbuf”命令禁用缓冲

tail -f filename | stdbuf -o0 cut -d " " -f 3- | sed -e "s/a/g&g/"

以上对我来说效果很好,删除“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

关于linux - 管道 tail -f 切割到 sed 不产生任何输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38252123/

相关文章:

linux - grep 不作为正则表达式

linux - 超过命名空间配额时如何清空hadoop上的垃圾?

c - 是否有允许我的应用程序拥有 root 权限的系统函数?

windows - 如何在 Windows 下将参数传递给 .sh 脚本?

linux - unix中的子命令替换多个符号,如何?

linux - 为什么这个 Linux 内核页表代码将返回值用大括号括起来?

linux - 如何列出 shell 脚本的层次结构/树结构?

linux - 命令行参数如何从 shell 传递到可执行文件?

bash - 使用 sed 编辑 crontab

正则表达式 sed 没有给我预期的结果