/var/log/messages からタイムスタンプ間の行範囲を取得します。

/var/log/messages からタイムスタンプ間の行範囲を取得します。

/var/log/messagesで2つのタイムスタンプの間のすべての行を取得したいと思います。開始時間のみを持ち、スクリプトに入力として提供します。これにより、スクリプトは次の日より前のすべての行を出力として取得できます。私はこれを試しました -

startDate=$1
toDate=`date -d "${startDate}+1day"`
sed -n '/${startDate}/ , /${toDate}/p' messages* 

$toDateしかし、メッセージログにパターンが見つからない場合、このアプローチに問題があることがわかりました。だから私はコードをこのように修正しました。

startDate=$1
toDate=`date -d "${startDate}+1day"`
until [ `grep -Fxq ${toDate} messages*` ];
do
    echo ${toDate}
    epoch=`date -d "${toDate}" +%s`
    new_epoch=$(($epoch+1))
    next_ts=`date -d "1970-01-01 ${new_epoch} sec"`
    toDate=${next_ts:4:15}
done
sed -n '/${startDate}/ , /${toDate}/p' messages* 

これで、ログの日付を一致させるのに問題があります。私の入力のコードは、次のNov 6 07:17:04 UTC 2017日付をNov 7 07:17:04。メッセージログの実際のタイムスタンプには、月名と単位日付の間に2つのスペースが含まれています。したがって、文字列を一致させることはできません。

この問題を解決する方法はありますか?スクリプトは2桁の日付(例:10)も処理したいと思います。

関連情報