如果找到与do
匹配的内容,我需要执行grep
命令。这是我所拥有的,但不起作用。
while
tail -F /home/user/log/test.txt | stdbuf -o0 grep -E -A 1 'NDC003|FLC133' | stdbuf -o0 grep 'TO.W';
do
cat /home/user/test/turnon.sh | ssh pi@10.10.10.10 bash
done
即使grep
返回匹配项,cat
命令也不会运行。我需要运行该命令,并且需要tail -F
才能继续监视日志文件中将来的模式匹配。我想念什么?
答案 0 :(得分:0)
您使用tail -F
来输送管道。因此,管道不会关闭(除非有人删除test.txt),因此您的抓地力不会终止。
答案 1 :(得分:0)
您可以按照以下方式尝试:
tail -f /home/user/log/test.txt | while read line
do case "$line" in
*"text_to_search"*) <do something>
;;
esac
done
答案 2 :(得分:0)
使用这种结构,在while行中使用tail
,对退出代码(在您的情况下为最后一个grep)仅进行一次测试。除非您遇到这种情况,否则该过程被阻止,因为tail -F
从不退出。
您可以在while循环中使用类似于 时髦的答案或在我的解决方案中:
while read line
do
ssh pi@10.10.10.10 "bash -s" < /home/user/test/turnon.sh "$line"
done < <(tail -F /home/user/log/test.txt | stdbuf -oL grep -E -A 1 'NDC003|FLC133' | stdbuf -oL grep 'TO.W')
您的建造过程中有几个困难。
done < <( echo hello)
tail -F
等待下一行,因此您必须使用stdbuf -oL
请求特殊缓冲。选项-oL
表示一行一行;我认为它不能与选项-o0
一起使用:没有缓冲。grep -E -A 1 'NDC003|FLC133'
表示您使用扩展正则表达式(正在寻找NDC003或FLC133),并且在匹配模式之后多输出1行。bash -s
)中读取的。