在特定时间(含)之后打印文件中的所有条目

在特定时间(含)之后打印文件中的所有条目

这是我文件中的日期格式:[1/24/21 9:19:20:183 MYT]

我想打印从此刻到文件末尾标记有时间戳的所有条目。我该如何使用 来做到这一点sed

答案1

您想只打印日期还是包含日期的整行?

要打印整行,我会使用grep '\[1/24/21 9:19:20:183 MYT\]' file,但如果你坚持使用sed,也可以使用 来完成sed -n '/\[1\/24\/21 9:19:20:183 MYT\]/p' file

grep -F编辑:按照用户 freddy 在下面第一条评论中的建议,可以使用 避免丑陋的反斜杠。

-n选项确保仅当程序明确打印行时才显示行sed。该p命令显式打印该行。

只打印日期grep也是更好的解决方案。您只需添加-o--only-matching选项即可。也应该可以sed,但需要比我更多的技能。

编辑:OP实际上有不同的要求并修改了问题。您可以给 一个行范围sed。 “从包含 [1/24/21 9:19:20:183 MYT] 的行到末尾”写为/\[1\/24\/21 9:19:20:183 MYT\]/,$。美元符号表示最后一行。所以:

sed -n '/\[1\/24\/21 9:19:20:183 MYT\]/,$p' file

答案2

如果不是必须的sed,则以下awk程序可以工作:

awk -v start="[1/24/21 9:19:20:183 MYT]" 'index($0,start)==1{f=1} f' file

这将解析文件,直到找到以变量中指定的字符串开头的行start。一旦找到,它会将标志设置f为 1。仅当设置了此标志时才打印行。

这假设条目有严格的时间顺序,即在带有时间戳的行之后不能出现“较早”的时间戳start。虽然不太可能,但在缓冲日志记录的情况下这是可能的。

相关内容