我正在尝试在给定日期范围内(2017年5月25日至2017年5月26日)搜索文件中的数据
2017-05-25 to 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**
答案 0 :(得分: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&#39; s评论)。
如果以上都不能解决您的问题,那么您需要编辑您的问题,以提供您正在尝试完成的更多详细信息。为此,我建议您查看How to create a Minimal, Complete and Verifiable example
答案 1 :(得分:0)
我认为,您希望打印那些日期为2017-05-25
或2017-05-26
的行。如果我正确,那么以下命令可能会对您有所帮助。 :)
egrep "(2017-05-25.*|2017-05-26.*)" file