Sed:选择两个时间戳之间的行

Sed:选择两个时间戳之间的行

我想选择两个时间戳之间的行 - 60 分钟前和现在

我的命令是

sed -n '/"$(date -d '60 minutes ago'  +"%H:%m")"/,/"$(date -d  +"%H:%m")"/p'  /var/www/html/glpi/files/_log/event.log/

但我得到:

sed: -e expression #1, char 14: unterminated address regex

答案1

像您这样的 sed 脚本将完全依赖于输入中存在的开始和结束时间戳。不要这样做 - 使用 awk 进行<=比较,这样即使输入中不存在确切的开始和结束时间戳,它也会工作,例如:

awk -v beg="$(date -d '60 minutes ago' +'%H:%m')" -v end="$(date +'%H:%m')" '(beg <= $0) && ($0 <= end)' /var/www/html/glpi/files/_log/event.log/

这只是对您需要什么的未经测试的猜测,因为您没有提供任何示例输入/输出供我们测试。它是否适合您主要取决于时间戳在您的输入中出现的位置(我假设它位于每行的开头),但是无论在哪里,都可以对脚本进行简单的调整。

相关内容