首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在列出的时间小于某个值的日志文件中搜索字符串?

如何在列出的时间小于某个值的日志文件中搜索字符串?
EN

Stack Overflow用户
提问于 2015-07-02 05:43:56
回答 2查看 99关注 0票数 1

我有一个包含信用卡请求/响应信息的日志文件。此日志持续运行,生成具有不同日期和时间的字符串。我只需要在整个日志中查找小于特定日期和时间的字符串。下面是我的日志的一部分,以及使用grep查找特定日期字符串的示例。

代码语言:javascript
复制
Friday, June 19, 2015 11:57:45 PM : Request:Capture
Order Number 000001
Credit Card Type: VI

使用grep -A 2 --text“6.19,2015”FirstData.log > FirstDataDate.log,我可以获得2015年6月19日以来的所有条目。由于这是一家午夜后开放的餐厅,因此日志将切换到2015年6月20日上午12:00之后发生的交易然而,我需要所有的交易在工作日(6月18日上午10:00-6月19日凌晨2:00 )。我能以某种方式使用同一字符串中列出的时间吗?regex或awk命令会有任何帮助吗?

EN

回答 2

Stack Overflow用户

发布于 2015-07-02 06:02:32

在我脑海中,这可能行得通。我不知道使用RegExs是否是解决这个问题的最好方法,但我可以提供一个RegEx,它将解决您在帖子(6月19日-20日)中提到的特定问题,其中的日期和关闭时间可以相当容易地调整。您仍然可以使用grep来处理所有这些问题,grep是一种无需全面编程就能很好地解决问题的方法。

June\s20,\s2015\s(12|[1-4]):[0-5][0-9]:[0-5][0-9]\sAM

将日期替换为您想要的日期。此外,请注意1-4个字符类;将4替换为您想要的任何关闭时间,RegEx将一直匹配到#:59:59 (例如4:59:59)。如果这能解决你想要的东西,请告诉我。如果没有,我很乐意提供更多的帮助。

票数 0
EN

Stack Overflow用户

发布于 2015-07-02 06:31:18

这将打印从6月19日中午到6月20日中午的行:

sed -n -r '/June 19.+PM/,/June 20.+PM/p' FirstData.log | head -n -1

对于sed一行程序来说,时间范围从10:00 AM到2:00 AM有点太复杂了。此bash脚本应该可以工作:

代码语言:javascript
复制
#!/bin/bash
day1="June 19, 2015"
day2="June 20, 2015"
open=$(date -d "$day1 10:00:00 AM" +%s)
close=$(date -d "$day2 02:00:00 AM" +%s)
matched=false
while read line
do
    if [[ $line =~ "$day1" ]]; then
        date=$(date -d "${line//M :*/M}" +%s)
        if [[ $date -ge $open ]]; then
            matched=true
        fi
    fi
    if [[ $line =~ "$day2" ]]; then
        date=$(date -d "${line//M :*/M}" +%s)
        if [[ $date -ge $close ]]; then
            matched=false
        fi
    fi
    if ($matched == true); then
        echo $line
    fi
done

将脚本另存为grepday.sh,使其可执行,然后使用./grepday.sh < FirstData.log运行它

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31172232

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档