YYYY:MM:DD HH:MM:SS
date(bash) 명령을 사용하여 두 날짜를 형식으로 비교하려고 합니다. 내 문제는 date 명령이 (내가 아는 한) 날짜 형식만 사용한다는 것입니다 YYYY-MM-DD HH:MM:SS
. sed를 정규 표현식과 함께 사용하여 처음 두 개의 :
with를 대체하려고 하는데 -
제대로 작동하지 않습니다. 저는 2018년에만 있어요.
date1="2018:01:16 12:25:35"
echo $date1 | sed 's/\([0-9]*\).*/\1/'
가능한 모든 제안을 받아들이겠습니다. 감사합니다.
답변1
두 가지 간단한 대체를 수행하십시오.
sed 's/:/-/;s/:/-/'
답변2
[질문에 답하십시오. 이는 실제 날짜 비교 문제를 해결하는 최선의 방법은 아닐 수도 있습니다.]
한 가지 접근 방식은 루프를 사용하여 한 번에 하나의 콜론을 바꾸는 것입니다. 결과에 두 개의 하이픈이 포함되면 루프를 중단합니다.
echo '2018:01:16 12:25:35' | sed ':a; /^[^-]*-[^-]*-/ b; s/:/-/; ta'
2018-01-16 12:25:35
또는 GNU sed가 있는 경우 다음으로 교체할 수 있습니다.모두콜론 앞에는 하이픈이 오고, 세 번째 하이픈부터 다시 콜론으로 대체됩니다.
echo '2018:01:16 12:25:35' | sed 'y/:/-/; s/-/:/3g'
2018-01-16 12:25:35
답변3
| sed 's/\([0-9]*\).*/\1/'
이것은 첫 번째 숫자 문자열을 저장한 다음 그 이후의 모든 숫자를 먹고 .*
그 숫자를 다시 저장하므로 사실상 그 이후의 모든 숫자는 2018
사라집니다.
처음 두 개의 숫자 문자열을 캡처하고 구분 기호를 추가하여 대체해야 합니다.아니요나머지 줄을 일치시킵니다.
$ echo "2018:01:16 12:25:35" | sed 's/\(....\):\(..\):/\1-\2-/'
2018-01-16 12:25:35
답변4
위의 결과를 얻기 위해 다음 두 가지 방법을 사용했습니다.
방법 1은 awk gsub 함수를 사용합니다.
echo $date1| awk '{gsub(":","-",$1);print $0}'
산출2018-01-16 12:25:35
방법 2는 sed를 사용합니다.
echo $date1 |sed "s/:/-/"| sed "s/:/-/"
산출2018-01-16 12:25:35
Perl을 사용하는 방법 3
echo $date1| perl -pne "s/:/-/"| perl -pne "s/:/-/"
산출2018-01-16 12:25:35