在shell脚本中在To和FROM之间的UNIX中搜索日志

时间:2016-08-30 07:39:19

标签: regex bash shell unix time

我有一个使用grep命令搜索日志目录的脚本,下面是命令。

export CMD="grep -ie '.*[${FROM_DATE}-${TO_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

因此脚本应该只提供这个时间内的日志。

我通过使用传递日期作为正则表达式尝试了以下操作,但它不起作用。

struct Person {
  let firstName: String
  let lastName: String
  let gender: Gender
  let height: Float
  let weight: Float
  let age: Int
}

请建议正确的方法。谢谢

EDIT1:请告诉我一种方法,如果正则表达式不合适,我可以这样做。

1 个答案:

答案 0 :(得分:1)

如果您只想从日志文件中选择行,则可以采用其他方式使用一些简单的命令,但更具可读性。

1.获取第一行和最后一行的行号。

# SN for start line number, EN for end line number.

export SN=`cat -n LOG_FILE | grep START_TIME | head -1 | awk '{print $1}'`
export EN=`cat -n LOG_FILE | grep END_TIME | tail -1 | awk '{print $1}'`

2.获取你想要的线条。

head -$EN LOG_FILE | tail -$(($EN-$SN+1))

一旦我们知道了我们需要的行号,就可以使用头部和尾部来切断我们不需要的部分。 ^ _ ^