我正在尝试搜索给定日期范围(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**
您当前的
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 评论过的事情)。
如果上述方法都不能解决您的问题,那么您需要编辑您的问题,以提供有关您想要完成的任务的更多详细信息。为此,我建议您看一下如何创建最小、完整且可验证的示例
我认为,您想要打印那些具有
2017-05-25
或 2017-05-26
作为日期的行。如果我是正确的那么下面的命令可能会帮助你。 :)
egrep "(2017-05-25.*|2017-05-26.*)" file