start='2019-11-11 17:02:54,479'
end='2019-11-12 05:13:55,998'
date='2019-11-11 19:05:55,823'
if LC_ALL=C command eval '[[ ! $date < $start && ! $date > $end ]]'; then
echo the date is in the range
fi
这进行了词汇比较。这是有效的,因为在 C 语言环境中,这些日期表示按词汇和时间顺序排序。
bash的[[ < / > ]]运算符用于strcoll()比较字符串,因此使用本地化排序算法。在 C 语言环境strcoll()中旨在像strcmp(). 在其他语言环境中,它会根据语言环境的约定进行比较,因此您对结果没有太多保证。
POSIXly,您可以使用:
if LC_ALL=C expr "x $date" '>=' "x $start" '&' "x $date" '<=' "x $end" > /dev/null; then
echo the date is in the range
fi
特别是对于 bash,它应该只是一个问题:
这进行了词汇比较。这是有效的,因为在 C 语言环境中,这些日期表示按词汇和时间顺序排序。
bash
的[[ < / > ]]
运算符用于strcoll()
比较字符串,因此使用本地化排序算法。在 C 语言环境strcoll()
中旨在像strcmp()
. 在其他语言环境中,它会根据语言环境的约定进行比较,因此您对结果没有太多保证。POSIXly,您可以使用:
现在,如果您正在处理日志文件,您可能希望与
awk
. 假设时间戳位于每行的开头:将打印以该范围内的时间戳开头的行。