这是我文件中的日期格式:[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
。虽然不太可能,但在缓冲日志记录的情况下这是可能的。