grep不在while循环中工作

时间:2016-10-09 20:37:42

标签: bash while-loop scripting grep

我正在尝试创建一个监控脚本并在发生特殊事件时联系指定的人,下面的第一个egrep代码工作正常但第二个根本没有工作,请帮助:

while true; do
  tail -f /Testing/script/errors | egrep -o --line-buffer "Timeout" >> wch.txt;
  cat /Testing/script/contacts.txt|egrep --line-buffer "FB" | cut -f2 -d ":" >> mail.txt;
  sleep 5
done

contact.txt:

FB:Kh.ismail014@gmail.com 谷歌:Amr.elrefaie@gmail.com

2 个答案:

答案 0 :(得分:0)

没有--line-buffer这样的选项,也许你的意思是--line-buffered,它是一个GNU主义。

第二个grep可以简化为:

grep --line-buffered 'FB' /Testing/script/contacts.txt | cut -f2 -d ":" >> mail.txt

您没有使用任何扩展正则表达式模式,因此使用egrepgrep -E)毫无意义。此外,您不需要cat,并且管道,grep将文件名作为参数。

同样,第一个grep可以写成:

tail -f /Testing/script/errors | grep -o --line-buffered "Timeout" >> wch.txt

所以你的while构造:

while :;  do
    tail -f /Testing/script/errors | egrep -o --line-buffer "Timeout" >> wch.txt
    grep --line-buffered 'FB' /Testing/script/contacts.txt | cut -f2 -d ":" >> mail.txt
    sleep 5
done

答案 1 :(得分:0)

第二行中的-f标志阻止了循环。随着文件的增长,输出会在/Testing/script/errors附加新行。