如何 grep 日志中的错误并为 shell 脚本中的所有错误打印 1 行?

How to grep errors in log and print 1 line for all errors in shell script?

我想在 shell 脚本中读取日志文件时检查错误,如果有错误,我希望它回显 'Please check errors' 并将其输出到文件中,但是问题如果有很多错误,它会为每个错误打印 'Please check errors',

例如:如果文件中有 5 个错误,它会像这样打印 'Please check errors' 5 次:

请检查错误 请检查错误 请检查错误 请检查错误 请检查错误

无论发现多少错误,我都希望它只打印 1 行。

**

FILE=/home/user/logs/file.log

    if [ ! -f $FILE ]
    then echo 'No File Exists' > /home/user/error.txt
    else tail $FILE  | \
         while read line ; do
            echo $line | grep -i "error"
              if [ $? = 1 ]
              then echo Please check Errors in: $FILE > /home/user/error.txt
              fi
         done
    fi
**

你的基本思路已经有了,你只需要重新整理一下。先用grep -q 'error' "$FILE"确认是否有错误,如果有错误则写"Please check Errors"提示符,输出有错误的行。

为什么不呢:

if grep -qi 'error' "$FILE"; then
  printf "Please check Errors in %s\n" "$FILE"
  grep -i 'error' "$FILE"
fi

没有循环,也没有在循环的每次迭代中调用 grep。只需调用 grep -q 来检查 "error" 是否存在,然后在第二次调用 grep.

时输出标题和包含 "error" 的每一行

如果要将输出写入文件,只需将所有输出重定向到新文件即可。