Linux 使用与时间范围和模式匹配的sed命令提取数据

Linux 使用与时间范围和模式匹配的sed命令提取数据,linux,logging,sed,grep,Linux,Logging,Sed,Grep,我想从一个大的日志文件(大约10GB)中提取行,并将数据复制到一个单独的文件中。 输出应与给定的时间范围和给定的文本匹配 我尝试了下面的命令,该命令只与时间范围匹配,但整个内容正在复制到文件中而不进行过滤。(然后我想grep给定的文本表单mycopy文件。) 如果我能同时包含要匹配的文本就更好了,但我不知道怎么做。 我想要类似的东西 sed '/givenTextTobeMatched/2020-07-21 17:28:00/,/2020-07-21 17:44:00/' myLogFile &

我想从一个大的日志文件(大约10GB)中提取行,并将数据复制到一个单独的文件中。 输出应与给定的时间范围和给定的文本匹配

我尝试了下面的命令,该命令只与时间范围匹配,但整个内容正在复制到文件中而不进行过滤。(然后我想grep给定的文本表单mycopy文件。)

如果我能同时包含要匹配的文本就更好了,但我不知道怎么做。 我想要类似的东西

sed '/givenTextTobeMatched/2020-07-21 17:28:00/,/2020-07-21 17:44:00/' myLogFile > mycopy

您对此的回复非常感谢。

只有在日志文件中同时出现开始和结束时间时,才可以使用正则表达式来标识时间范围。如果在17:44:00时未记录任何内容,则
sed
将复制文件的整个其余部分,因为从未满足结束条件。如果您不能保证每秒都有日志事件,可能会切换到更高级别的语言,如Awk

句法上

sed '/2020-07-21 17:28:00/,/2020-07-21 17:44:00/!d;/givenTextTobeMatched/!d' myLogFile
我会照你说的做。注意否定;首先,我们删除范围之外的线,而不是与模式不匹配的线。(从某种意义上说

sed -n '/2020-07-21 17:28:00/,/2020-07-21 17:44:00/{
    /givenTextTobeMatched/p
}' myLogFile

可能更惯用、更合乎逻辑,但很难用便携工具压缩到一行。)

您能添加示例输入和预期输出吗。@tripleee非常感谢,您提供的命令对我很有用。这正是我所需要的。如果你能提供它作为一个答案,我可以接受它。我删除了评论,并张贴了一个答案,而不是略有扩大。
sed -n '/2020-07-21 17:28:00/,/2020-07-21 17:44:00/{
    /givenTextTobeMatched/p
}' myLogFile