我正在使用 sed 进行范围搜索。我想将日志数据从日期和时间解析2016-09-29 01:00
为2016-09-29 01:30
. 这就是为什么我一直在使用以下命令,
$ sed -n '/2016-09-29 01:/,/2016-09-29 01:30:.*$/p'
但问题是如果 1:30 在日志中不可用,那么它将所有日志返回到最后。
那么如何使用它,以便如果1:30
不存在它将转到下一个记录直到结束。
需要考虑的事项:日志包含堆栈跟踪,因此包含堆栈跟踪的行不以日期开头。
没那么奇怪。
sed
是一个流水线编辑器,它在线路出现时对其进行处理。范围 like/a/,/b/
表示一旦a
找到就选择行,找到后不再选择b
。如果b
从未找到,它永远不会停止选择行。在这里,您应该
awk
改为使用。假设这些时间戳位于行首:请注意,它只会选择在该范围内具有时间戳的行,因此会排除没有时间戳的行,即使它们位于该范围内具有时间戳的行之间。
另一种解决方法是:
即使用类似 in 的范围
sed
,但在第一行输入两个日期之间的范围,并且仅当我们找到时间戳大于结束日期的行时才保留它。