linux - 如何从今天的日志文件中读取一个单词?在 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.
解决方案
你可以用一行 Bash 中grep
的命令来解决你的问题:date
< text.txt grep "^$(date +"%Y-%m-%d") .* No valid license found" && echo Found!
此行查找以text.txt
当前日期开头的行,格式与文件中的格式相同,并查找No valid license found
字符串。如果找到,它会回显,Found!
但当然您可以用sendmail
命令替换该部分。
推荐阅读
- java - 如何处理自定义 coap 选项(非标准)
- arrays - 在 foreach 循环中形成您的数组并返回该数组
- r - 在 ggplot 数字的 .eps 和 .pdf 中编码希腊符号
- c# - 调用部分视图表重定向到登录而不是停留在同一页面上
- jquery - 当用户在此部分活动时,菜单下划线
- neo4j - 如何使用 neo4j.Apoc 执行子模式匹配?
- fortran - Fortran 是否有未定义的行为?
- .net - 如果所有者窗口以编程方式关闭,WPF ShowDialog() 不会返回
- android - RecyclerView 将 Alpha 设置为所选项目
- php - Symfony 4:验证器正在刷新而不是显示消息