如何提取日志中最后一次出现的datetime后的19位日期时间串?
提取日志中最后一次出现的目标日期时间
AWK 方案
用AWK全程处理,逐行扫描并记录最后一次匹配的日期:
awk '{ while (match($0, /datetime":"([0-9-T:.]{19})/, m)) { last_dt = m[1] $0 = substr($0, RSTART + RLENGTH) } } END { print last_dt }' logfile.txt
- 每次匹配到
datetime":"后,提取后续19位日期并更新last_dt,同时截断当前行已处理的部分继续扫描;最终输出最后记录的日期。
SED 方案
结合 tail 的简易写法
先提取所有符合规则的日期,再取最后一行:
.*datetime":"会匹配每行内最后一次出现的前缀,提取对应的日期;tail -1直接取所有结果中的最后一项,即日志里最后出现的目标日期。
纯 SED 写法(无需额外工具)
通过循环替换保留最后一个匹配项:
s/(.*)datetime":"([0-9-T:.]{19})/\1/ ta s/.*// s/^/\2/' logfile.txt
- 循环删除最后一个匹配项及之前的内容,直到无法匹配;最后保留的就是最后一次出现的日期字符串。
内容的提问来源于stack exchange,提问作者Nathan
相关产品推荐
相关产品推荐

