如何打印两个不同日期之间的日期

如何打印两个不同日期之间的日期

我想打印两个不同日期之间的日期(即开始日期和两个日期)

如果开始日期是2013-09-05结束日期是2013-09-10,那么我想要结果为

2013-09-05
2013-09-06
2013-09-07
2013-09-08
2013-09-09 
2013-09-10 

..... ETC

在月末和月初,它应该打印正确的日期。

答案1

最简单的方法是使用date命令。在 UNIX 世界中,日期的度量单位是自纪元以来的秒数。如果将日期转换为秒,则可以用来date打印您感兴趣的日期:

END=$(date -d "2013-09-10" +%s);
DATE=$(date -d "2013-09-05" +%s); 
while [[ "$DATE" -le "$END" ]]; do date -d "@$DATE" +%F; let DATE+=86400; done

将其复制/粘贴到您的终端中应该返回

2013-09-05
2013-09-06
2013-09-07
2013-09-08
2013-09-09
2013-09-10

的相关部分man date

   -d, --date=STRING
          display time described by STRING, not 'now'

   %F     full date; same as %Y-%m-%d

答案2

使用 GNU grep

grep -A5 "2013-09-05" file

使用awk

awk '/2013-09-05/,/2013-09-10/{print}' file

使用sed

sed -n '/2013-09-05/,/2013-09-10/p' file

或者,阅读评论,使用 GNU date

start=2013-09-05 
end=2013-09-11
   while [[ $start < $end ]] 
     do 
      printf "$start\n"; start=$(date -d "$start + 1 day" +"%Y-%m-%d") 
     done

相关内容