숫자를 바꿔서 날짜 형식을 다시 지정하세요.

숫자를 바꿔서 날짜 형식을 다시 지정하세요.

입력하다:

일 1 2018년 7월 9일 22:40:57 2019년 1월 20일 11:48:52
일 2 2018년 11월 28일 19:23:49 2019년 1월 20일 05:29:49

예상 출력:

일 1 2018/09/07 22:40:57 2019/20/01 11:48:52
일 2 2018/28/11 19:23:49 2019/20/01 05:29:49

다음에서 텍스트 변경일/월/년도착하다년 월 일, 즉 대체 텍스트입니다.

답변1

너무 길어요.

$ echo -e "Job1 07/09/2018 22:40:57 01/20/2019 11:48:52\nJob2 11/28/2018 19:23:49 01/20/2019 05:29:49" | sed 's/\([0-9]\+\)\/\([0-9]\+\)\/\([0-9]\{4\}\)/\3\/\2\/\1/g' -
Job1 2018/09/07 22:40:57 2019/20/01 11:48:52
Job2 2018/28/11 19:23:49 2019/20/01 05:29:49

sed명령 설명:

's/pattern/replacement/'이것이 기본 구문이다

g끝에 a를 추가 하면 (예 's/pattern/replacement/g': ) 한 줄에서 여러 번 대체됩니다.

[0-9]임의의 숫자와 일치합니다.

[0-9]*0개 이상의 숫자와 일치합니다.

[0-9]\+하나 이상의 숫자와 일치합니다(참고: 백슬래시는 이스케이프 문자입니다. 이 경우에는 대신 해석되기 때문에 \이스케이프해야 합니다 . 또한 다른 경우/사용에서는 올바르게 이스케이프할 필요가 없습니다).+bashsed

\/다시 슬래시 /; 로 이스케이프해야 하지만 이제 를 구분 기호로 sed사용 /하므로 다른 문자를 사용할 수 있습니다(예: 슬래시를 바꿀 필요는 없지만 at 문자(또는 구분 기호로 사용하는 다른 문자).patternreplacement's@pattern@replacement@'/@

[0-9]\{4\}4자리 숫자 {와 다시 일치하며 이스케이프해야 하므로 이스케이프해야 }합니다 .bash

([0-9])는 임의의 단일 숫자와 일치하고 나중에 사용할 수 있도록 (메모리에) "저장"합니다. 그런 다음 대체 시 (괄호로 묶인 일치하는 하위 문자열을 사용할 수 있습니다 )(이 경우 단일 숫자입니다). 다시 말하지만, 우리는 그것들을 탈출해야 합니다 bash. 왜냐하면 .

\1저장된 첫 번째 하위 문자열입니다(이전 단락 참조). \2두 번째와 세 번째도 마찬가지입니다 \3.

따라서 \([0-9]\+\)\/\([0-9]\+\)\/\([0-9]\{4\}\)날짜와 일치하거나 형식을 지정합니다.dd/mm/yyyyd/m/yyyy

\3\/\2\/\1슬래시인 \3(세 번째 하위 문자열, 연도) , (두 번째 하위 문자열, 월), 다시 (슬래시), 마지막으로 (첫 번째 하위 문자열, 날짜의 월)을 포함하는 대체입니다 .\/\2\/\1

관련 정보