grep 文件中特定日期范围的数据

问题描述 投票:0回答:2

我正在尝试搜索给定日期范围(2017 年 5 月 25 日 - 5 月 26 日)的文件中的数据

2017-05-25 至 2017-05-26

它会搜索数据,但也会搜索不在该日期范围内的其他数据。 我正在使用以下命令。

sed -n '/2017-05-25/,/2017-05-26/p' /tmp/CGMJGFTS_FIN_NAM_PRODlog

这个看起来不错

1_V9AGGSWDC16_112_2017_05_25-160523_1001293_464.csv:"CGMJGFTS_FIN_NAM_PROD"!@#"PATROL_GC"!@#"169.177.208.155"!@#""!@#"4100"!@#"169.177.208.155"!@#"ISQL"!@#"PATMON"!@#"2017-05-24"!@#"2017-05-24"!@#"1"!@#"SYBASE"!@#"CONDB"!@#"2017-05-25 00:01:16"

但它也搜索

@#"2"
1_V9AGGSWDC16_112_2017_05_28-160445_1001293_467.csv:"CGMJGFTS_FIN_NAM_PROD"!@#"PATROL_GC"!@#"169.177.208.155"!@#""!@#"4100"!@#"150.110.82.18"!@#"ISQL"!@#"DBA_LOCAL"!@#"**2017-05-27**
unix awk sed grep
2个回答
0
投票

您当前的

sed
模式将查找多行的匹配项。 (请参阅@twalberg 的评论)。


如果您正在查找包含两个日期(作为文字)的单独行,并且假设所述日期是按顺序排列的(即,较旧的日期先列出,较新的日期在该行后面列出),您可以尝试使用单个正则表达式,例如:

sed -n '/2017-05-25.*2017-05-26/p' <filename>

例如:

$ cat tt
1.some_stuff.2017-05-24_some_more_stuff:2017-05-24;and the end
2.some_stuff.2017-05-25_some_more_stuff:2017-05-26;and the end   # should only find this row
3.some_stuff.2017-05-24_some_more_stuff:2017-05-26;and the end
4.some_stuff.2017-05-25_some_more_stuff:2017-05-27;and the end

$ sed -n '/2017-05-25.*2017-05-26/p' tt
2.some_stuff.2017-05-25_some_more_stuff:2017-05-26;and the end

当然,除了

sed
之外,你还有其他选择,例如:

$ egrep "2017-05-25.*2017-05-26" tt
2.some_stuff.2017-05-25_some_more_stuff:2017-05-26;and the end

$ awk '/2017-05-25.*2017-05-26/ {print}' tt
2.some_stuff.2017-05-25_some_more_stuff:2017-05-26;and the end

另一方面,如果您正在寻找

sed
来查找日期(作为文字)在 2 个搜索日期范围内的各个行,则
sed
对日期数学/比较一无所知(同样,相同) @twalberg 评论过的事情)。


如果上述方法都不能解决您的问题,那么您需要编辑您的问题,以提供有关您想要完成的任务的更多详细信息。为此,我建议您看一下如何创建最小、完整且可验证的示例


0
投票

我认为,您想要打印那些具有

2017-05-25
2017-05-26
作为日期的行。如果我是正确的那么下面的命令可能会帮助你。 :)

egrep "(2017-05-25.*|2017-05-26.*)" file
© www.soinside.com 2019 - 2024. All rights reserved.