서로 다른 두 날짜(예: 시작 날짜와 두 날짜) 사이의 날짜를 인쇄하고 싶습니다.
시작 날짜가이고 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