2つの異なる日付間の日付を印刷する方法

2つの異なる日付間の日付を印刷する方法

2つの異なる日付(たとえば、開始日と2つの日付)の間の日付を印刷したいと思います。

開始日が終了2013-09-05日が2013-09-10次の場合は、結果が必要です。

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

.....など

月末と秒に正しい日付を印刷する必要があります。

答え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

関連情報