【问题标题】:Send grepped tail output to netcat将 grepped 的尾部输出发送到 netcat
【发布时间】:2016-03-11 00:45:54
【问题描述】:

我正在尝试运行以下命令,但没有任何内容发送到 netcat

tail -F file.txt | grep test | nc host 9999

如果我删除 grep,则成功跟踪尾部并发送到 netcat。

如果我只运行以下命令,数据就会返回,所以我知道应该将数据发送到 nc 管道:

tail -F file.txt | grep test

有什么想法吗?

更新

我添加了以下内容以取消缓冲管道输出,但没有任何结果:

tail -F file.txt | stdbuf -o0 grep test | nc host 9999

当我打开行缓冲时,输出被切断

tail -F file.txt | grep --line-buffered test | nc host 9999

在哪里

workid: ID:ITEST_HGR1-EMS12103.1A156BB6CEB1:10F76E5D

发送为

workid: ID:ITEST_HGR1-EMS12103.1A156BB6CEB1:10F7 

【问题讨论】:

    标签: unix grep tail netcat


    【解决方案1】:

    您需要更改grep 的默认缓冲行为。如果您使用的是 GNU grep,则可以使用 grep --line-buffered,或尝试使用 unbuffer

    【讨论】:

    • 这让我更接近了,但似乎线条被切断了。例如,nc 监听器现在打印: workid: ID:ITEST_HGR1-EMS12103.1A156BB6CEB1:10F7 而实际 grepped 输出应该是 workid: ID:ITEST_HGR1-EMS12103.1A156BB6CEB1:10F76E5D
    • 我尝试在 grep 语句之前添加 stdbuf -o0 并没有通过
    • 如果你删除 netcat 是否会切断线路?
    • 也似乎 stdbuf 和 unbuffer 都没有安装在这个 VM 上(我没有能力安装它,因为它由另一个组管理)
    • 只是猜测,但您是否尝试过通过 xargs 调用 netcat 进行管道传输?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 2014-07-17
    • 1970-01-01
    • 2021-10-15
    • 1970-01-01
    • 2019-06-27
    • 1970-01-01
    相关资源
    最近更新 更多