如何从CLI grep连续流并在找到字符串时退出

如何从CLI grep连续流并在找到字符串时退出,grep,Grep,我需要从ping类型的输出中grep一个连续的输出流,并检查模式“EOF”,如果找到,则退出。到目前为止,我已经在grep中使用了行缓冲模式,并且还尝试输出到一个文件,grep这个文件,但是没有能够让它工作。最后的办法是向社区寻求帮助。理想情况下,我不需要调试文件,只希望代码通过管道和if-then语句执行。 “Apt get install hping3”将获得hping3软件包 我当前的输出是源源不断的“EOF已达到,请等待几秒钟,然后按ctrl+c”,这就是为什么我尝试写入脚本以自行退出循

我需要从ping类型的输出中grep一个连续的输出流,并检查模式“EOF”,如果找到,则退出。到目前为止,我已经在grep中使用了行缓冲模式,并且还尝试输出到一个文件,grep这个文件,但是没有能够让它工作。最后的办法是向社区寻求帮助。理想情况下,我不需要调试文件,只希望代码通过管道和if-then语句执行。
“Apt get install hping3”将获得hping3软件包

我当前的输出是源源不断的“EOF已达到,请等待几秒钟,然后按ctrl+c”,这就是为什么我尝试写入脚本以自行退出循环,而不必监视循环以按ctrl-c

    #$1 - destination IP
    #$2 - signature
    #$3 - filename
    #$4 - data frame size
    CMD="hping3 $1 --icmp --sign $2 --file $3 -d $4 -u"
    EXP="EOF"
    while true
        do
        $CMD | grep -q --line-buffered -m 1 $EXP > ./debug.txt
            if grep "$EXP" ./debug.txt
            then
            echo "string found"
            fi
    exit
    done
试试这个:

hping3 $1 --icmp --sign $2 --file $3 -d $4 -u | sed '/EOF/q0'

这将持续跟踪日志文件并将输出发送到sed。Sed将搜索您指定的正则表达式(如果
EOF
位于行的开头,则可以添加
^
),然后以代码0退出(使用
q0
Sed命令)。在执行
q
命令之后,您可以使用您喜欢的任何退出代码。

为什么在
while
循环中有
退出
。那么
hping3…|grep-q-m1——行缓冲EOF
不能正常工作?“hping3 10.0.2.2——icmp——sign exfil lab——file test.txt——d 50-u | grep-q-m1——行缓冲EOF”打印相同的流。但这难道不是因为grep发现了“EOF”模式,并且正在打印该行吗?这就是为什么我认为我的问题在于验证声明。谢谢你的链接,非常有用,但我需要找到一种方法来阻止hping3的下一次迭代,所以我洗耳恭听。
hping3
发送到标准输出还是标准错误
grep-q
不应该输出任何内容,应该在第一次匹配时退出。是否
hping3。。。2> &1 | grep-q…
按您想要的方式工作?“如果hping3$1--icmp--sign$2--file$3-d$4-u 2>&1 | grep-q--line buffered-m 1 EOF”工作正常。我想我需要研究一下标准输出和错误之间的区别,以防我再次遇到这种情况。谢谢主要线索应该是您在屏幕上看到的是
hping3
输出,而不是
debug.txt
文件。这意味着无论是
grep
还是重定向都看不到它。这意味着它不是标准输出。