如何 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"
的每一行
如果要将输出写入文件,只需将所有输出重定向到新文件即可。
我想在 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"
的每一行
如果要将输出写入文件,只需将所有输出重定向到新文件即可。