나는 2010년 1월 1일부터 2010년 1월 2일까지 일련의 날짜를 생성하려고 합니다. 분의 간격은 다음과 같습니다.
2010 1 1 00 00 00
2010 1 1 00 20 00
2010 1 1 00 30 00
2010 1 1 00 40 00
2010 1 1 01 00 00
2010 1 1 01 20 00
2010 1 1 01 30 00
2010 1 1 01 40 00
...
2010 2 1 00 00 00
그러니까 종료일까지 매시간 00분, 20분, 30분, 40분씩. 문제에 대한 도움을 찾았습니다.https://stackoverflow.com/questions/15621409/print-dates-in-date-range-linux 하지만 "-"를 공백과 고르지 않은 단계로 바꾸는 것은 물론, 분을 추가할 수도 없습니다. 이것은 지금까지 내 코드이며 작동하지 않습니다.
startdate=2010-01-01-00-00-00
enddate=2010-02-01-00-00-00
curr="$startdate"
while true; do
echo "$curr"
[ "$curr" \< "$enddate" ] || break
curr=$( date +%Y-%m-%d-%H-%M-%S --date "$curr +10 minutes" )
done
이러한 간격(사이에 공백 포함)을 사용하여 위의 출력을 어떻게 생성할 수 있습니까?
답변1
이것이 내가 하는 방법이다:
$ date -d '2010-01-01 00:00:00' +%s
1262300400
$ date -d '2010-02-01 00:00:00' +%s
1264978800
$ for timestamp in {1262300400..1264978800..600}; do date -d @"$timestamp" '+%Y %m %d %H %M %S'; done | grep -Ev '[15]0 00$'
무엇 grep -Ev '[15]0 00$'
인가요:
grep
자체적으로 인수로 설명되는 일련의 조건과 일치하는 행을 선택합니다.-v
: 매개변수와 일치하지 않는 행을 선택합니다.-E
: 우리가 일치시키려고 시도할 패턴이 "확장 정규식"이라고 선언합니다(실제로 여기서는 필요하지 않습니다. 제 실수입니다).[15]0 00$
: ""1 또는 5"로 끝나는 줄 선택, "0", "공백", "이중 0"을 선택하는 정규식입니다. 이는 "10" 및 "50" 줄과 일치합니다. 이 줄은 다음으로 인해 제거되었습니다. 위의-v
설명.