sed 명령을 사용하여 문자열에서 ":"의 처음 2개 항목을 바꿉니다.

sed 명령을 사용하여 문자열에서 ":"의 처음 2개 항목을 바꿉니다.

YYYY:MM:DD HH:MM:SSdate(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

관련 정보