首页 > 解决方案 > 如何从今天的日志文件中读取一个单词?在 BASH 中

问题描述

我需要创建一个 bash 脚本,当显示“未找到有效许可证”消息时向我发送通知。

我的日志文件有 5 年前的日志。所以我需要这个脚本来只读取今天的行。(脚本将每天运行)。

到目前为止,我已经到了这里:

#! /usr/bin/bash
now=$(date)
while read LINE;
do
for WORD in $LINE;
do
if [ "$WORD" == "license" ]
then
echo "the word has been found"
fi
done
done <"text.txt"

如何只读取以当前日期开头的行?另外,我需要搜索一个短语,而不是一个单词。

我的日志文件如下所示:

2020-12-08 23:55:38 INFO: [system] automatic save: begin
2020-12-08 23:55:39 INFO: [system] automatic save: end
2020-12-09 00:04:32 INFO: [system] user '_internal_suite' logged in
2020-12-09 00:04:32 INFO: [_internal_suite] user '_internal_suite' logged out
2020-12-09 00:04:52 INFO: [system] user 'admin' logged in
2020-12-09 00:04:55 WARNING: [system] error code: 12001 description: no valid license found message: No valid license found.

标签: linuxbashshellawk

解决方案


你可以用一行 Bash 中grep的命令来解决你的问题:date

< text.txt grep "^$(date +"%Y-%m-%d") .* No valid license found" && echo Found!

此行查找以text.txt当前日期开头的行,格式与文件中的格式相同,并查找No valid license found字符串。如果找到,它会回显,Found!但当然您可以用sendmail命令替换该部分。


推荐阅读