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

Unix 文件中特定日期范围的grep数据,unix,awk,sed,grep,Unix,Awk,Sed,Grep,我试图在给定日期范围内搜索文件中的数据(2017年5月25日至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

我试图在给定日期范围内搜索文件中的数据(2017年5月25日至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**

您当前的
sed
模式将在多行上查找匹配项。(见@twalberg的评论)


如果您要查找包含这两个日期(作为文字)的单独行,并且假设所述日期是有序的(即,先列出较旧的日期,后列出较新的日期),则可以尝试使用单个regexp,例如:

sed -n '/2017-05-25.*2017-05-26/p' <filename>
当然,除了
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对这一点发表了评论)



如果上述问题都没有解决您的问题,那么您需要编辑您的问题,以提供您正试图实现的目标的更多细节。为此,我建议您查看一下

我认为,您希望打印那些日期为2017-05-25或2017-05-26的行。如果我是正确的,那么下面的命令可能会帮助您。:)


为什么看起来“好”?-它包含不在所需范围内的
2017-05-24
。发布输入片段(更多行),这实际上不是对范围日期的搜索。字面意思是“显示从匹配‘2017-05-25’的第一行到匹配‘2017-05-26’的后续第一行的所有行”。如果“2017-05-26”不存在,它将显示在文件末尾。如果“2017-05-25”不存在,则不会显示任何内容
sed
对日期和涉及日期的算术/比较一无所知。我想列出所有日期为2017-05-25和2017-05-26的行。上面的命令只列出了同时包含这两个日期的行,我不想担心,但这没有意义。。。您需要同时显示日期2017-05-25和2017-05-26的行。。。但我建议的示例是不可接受的,因为它们提供了您想要的,即日期为2017-05-25和2017-05-26的行???我建议你看看我提供的链接,然后用。。。至少一组样本数据和期望的结果
$ 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
egrep "(2017-05-25.*|2017-05-26.*)" file