UNIX의 특정 패턴 사이에서 텍스트 바꾸기

UNIX의 특정 패턴 사이에서 텍스트 바꾸기

파일의 밀리초 필드를 ":" 패턴으로 바꾸고 싶습니다.

Input:-
Jun 12 2018  3:33:49:000PM
Jun 12 2018  3:33:49:850AM

Desired Output:-
Jun 12 2018  3:33:49.000PM
Jun 12 2018  3:33:49.850AM

내 측에서 다음 Sed 명령을 시도했지만 100% 결과를 얻지 못했습니다. 아래는 내 SED 명령입니다.

cat input.txt | sed 's/\(|\|^\|[A-Z]\)\([^|\]*\):\([0-9]\+\)\(AM\|PM\)\(|\|$\)/\1\2.\3 \4\5/g;s/"/ /g;s/:000/.000 /g' >output.txt

답변1

노력하다:

sed -E 's/:([0-9]+[AP]M$)/.\1/'

나는 정규식에 어떤 문제가 있는지 알아내려고 노력하지 않았지만 개인적으로 꼭 필요한 경우가 아니면 줄의 시작 부분을 일치시키지 않을 것입니다. 줄의 끝 부분만 일치시키는 것도 더 빠릅니다.

답변2

마지막으로 세 번째 콜론을 점으로 바꾸고 싶습니다.

sed 's/:/./3' input.txt

답변3

다음 sed 명령을 시도했는데 내 목적이 해결되었습니다.

sed -e 's/([AZ][az]{2}[ ]{1,2}[0-9]{1,2}[ ]{1,2}[0-9]{4}[ ] {1,2}[0-9]{1,2}:[0-9]{2}:[0-9]{2}):([0-9]{3}[A,P]M )/\1.\2/g'

관련 정보