【发布时间】:2016-08-30 07:39:18
【问题描述】:
我有一个使用 grep 命令搜索日志目录的脚本,下面是命令。
export CMD="grep -ie '.*${RUN_DATE}.*${MESSAGE_TO_SEARCH}' ${LOG_FILE_PATH}/${LOG_FILE} | awk -F 'addInfo' '{print \$2;}' | sed '/^$/d'"
现在 RUN_DATE 是脚本运行的任何日期。
MESSAGE_TO_SEARCH 是我们在日志文件中搜索的任何消息。
在启动脚本之前声明。
我想修改它在 TO 和 FROM 时间之间搜索的脚本,例如:
FROM_TIME=2016-08-28 13:30:00 和
TO_TIME=2016-08-29 17:00:00
所以脚本应该只给出这段时间内的日志。
我通过使用传递日期作为正则表达式尝试了以下操作,但它不起作用。
export CMD="grep -ie '.*[${FROM_DATE}-${TO_DATE}].*${MESSAGE_TO_SEARCH}' ${LOG_FILE_PATH}/${LOG_FILE} | awk -F 'addInfo' '{print \$2;}' | sed '/^$/d'"
请提出正确的方法。谢谢
EDIT1:如果正则表达式不适合它,请告诉我一种方法。
【问题讨论】:
-
不要将命令存储在变量中。您需要使用 eval 才能使用它。
-
你能给我举个例子吗
-
Regex 不是匹配日期范围的最佳工具。使用脚本解析日志文件名会更好。 Here is an example 展示了正则表达式对于日期的复杂程度
标签: regex bash shell unix time