2017-08-08 39 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