2017-08-08 69 views
-1

我想在指定日期范围内的文件中搜索数据(5月25日-26th 2017日)grep的数据

2017年5月25日至2017年5月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"[email protected]#"PATROL_GC"[email protected]#"169.177.208.155"[email protected]#""[email protected]#"4100"[email protected]#"169.177.208.155"[email protected]#"ISQL"[email protected]#"PATMON"[email protected]#"2017-05-24"[email protected]#"2017-05-24"[email protected]#"1"[email protected]#"SYBASE"[email protected]#"CONDB"[email protected]#"2017-05-25 00:01:16" 

而且还搜索

@#"2" 
1_V9AGGSWDC16_112_2017_05_28-160445_1001293_467.csv:"CGMJGFTS_FIN_NAM_PROD"[email protected]#"PATROL_GC"[email protected]#"169.177.208.155"[email protected]#""[email protected]#"4100"[email protected]#"150.110.82.18"[email protected]#"ISQL"[email protected]#"DBA_LOCAL"[email protected]#"**2017-05-27** 
+0

它为什么看起来“好”? - 它包含不在所需范围内的“2017-05-24”。发布输入片段(更多行) – RomanPerekhrest

+1

这不是真正的搜索范围日期。它的字面意思是“将第一行匹配'2017-05-25'的所有行显示为匹配”2017-05-26“的第一行。”如果“2017-05-26”不存在,它将显示在文件末尾。如果“2017-05-25”不存在,则不会显示任何内容。对于涉及它们的日期和算术/比较,“sed”并不知道任何事情。 – twalberg

回答

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的评论)。


如果没有上述地址的问题,那么你就需要修改你的问题,提供你要完成什么更多的细节。为此,我建议你看看How to create a Minimal, Complete and Verifiable example

+0

我想列出所有日期为2017-05-25和2017-05-26的行。上面的命令列表只包含两个日期,我不想要的行 – user662285

+0

对不起,但这并不使感觉...你需要两个日期2017-05-25 **和** 2017-05-26 ...但我的建议示例是不可接受的,因为它们提供了你想要的,即具有两个日期2017- 05-25 **和** 2017-05-26 ???我建议你看看我提供的链接,然后用...至少更新你的问题......一组样本数据和期望的结果 – markp

0

我想,你想打印那些行将有2017-05-252017-05-26作为日期。如果我是正确的,那么下面的命令可能会帮助你。 :)

egrep "(2017-05-25.*|2017-05-26.*)" file