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

时间:2015-08-04 17:59:07

标签: grep

我需要从ping类型输出中获取连续输出流并检查模式“EOF”然后在找到时退出。到目前为止,我已经在grep中使用了行缓冲模式,并且还尝试输出到文件,grep文件,但是无法使其工作。最后的办法是向社区寻求帮助。理想情况下,我不想要一个调试文件,只想让代码通过管道执行,如果是那么语句 “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

1 个答案:

答案 0 :(得分:0)

尝试一下:

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

它的作用是它将连续拖尾您的日志文件并将输出发送到sed。 Sed将搜索您指定的正则表达式(如果^位于行首,则可以添加EOF),然后以代码0退出(q0 sed命令) 。在q命令之后,您可以使用自己喜欢的退出代码。