입력하다:
일 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]\+
하나 이상의 숫자와 일치합니다(참고: 백슬래시는 이스케이프 문자입니다. 이 경우에는 대신 해석되기 때문에 \
이스케이프해야 합니다 . 또한 다른 경우/사용에서는 올바르게 이스케이프할 필요가 없습니다).+
bash
sed
\/
다시 슬래시 /
; 로 이스케이프해야 하지만 이제 를 구분 기호로 sed
사용 /
하므로 다른 문자를 사용할 수 있습니다(예: 슬래시를 바꿀 필요는 없지만 at 문자(또는 구분 기호로 사용하는 다른 문자).pattern
replacement
's@pattern@replacement@'
/
@
[0-9]\{4\}
4자리 숫자 {
와 다시 일치하며 이스케이프해야 하므로 이스케이프해야 }
합니다 .bash
([0-9])는 임의의 단일 숫자와 일치하고 나중에 사용할 수 있도록 (메모리에) "저장"합니다. 그런 다음 대체 시 (
괄호로 묶인 일치하는 하위 문자열을 사용할 수 있습니다 )
(이 경우 단일 숫자입니다). 다시 말하지만, 우리는 그것들을 탈출해야 합니다 bash
. 왜냐하면 .
\1
저장된 첫 번째 하위 문자열입니다(이전 단락 참조). \2
두 번째와 세 번째도 마찬가지입니다 \3
.
따라서 \([0-9]\+\)\/\([0-9]\+\)\/\([0-9]\{4\}\)
날짜와 일치하거나 형식을 지정합니다.dd/mm/yyyy
d/m/yyyy
\3\/\2\/\1
슬래시인 \3
(세 번째 하위 문자열, 연도) , (두 번째 하위 문자열, 월), 다시 (슬래시), 마지막으로 (첫 번째 하위 문자열, 날짜의 월)을 포함하는 대체입니다 .\/
\2
\/
\1