sed 또는 awk를 사용하여 파일의 날짜 형식 변경

sed 또는 awk를 사용하여 파일의 날짜 형식 변경

다음 형식의 파일이 있습니다

----------------------------------------
  Name: cust foo
  mail: [email protected]
  Account Lock: FALSE
  Last Password Change: 20170721085748Z
----------------------------------------
  Name: cust xyz
  mail: [email protected]
  Account Lock: TRUE
  Last Password Change: 20181210131249Z
----------------------------------------
  Name: cust bar
  mail: [email protected]
  Account Lock: FALSE
  Last Password Change: 20170412190854Z
----------------------------------------
  Name: cust abc
  mail: [email protected]
  Account Lock: FALSE
  Last Password Change: 20191030080405Z
----------------------------------------

Last Password Change데이터 형식을 변경하고 싶지만 다른 방법 이 있는지 YYYY-MM-DD확실하지 않습니다 . for 루프를 시도하고 옵션을 사용할 수 있지만 정규식을 사용하는 더 쉬운 방법이 있는지 확실하지 않습니다.sedawkdate -d

답변1

두 개의 대시를 추가하고 몇 가지 추가 문자를 제거한 것이 전부이므로 필요하지 않습니다 date.

$ sed -Ee 's/(Last Password Change: )(....)(..)(..).*Z/\1\2-\3-\4/' < foo.txt
...
  Name: cust foo
  mail: [email protected]
  Account Lock: FALSE
  Last Password Change: 2017-07-21
...

더 엄격한 패턴의 경우 점(모든 문자와 일치)을 [0-9]숫자만 일치시켜 바꿀 수 있습니다. \1물론 교체에서도 괄호 안에 일치하는 패턴으로 확장됩니다.

답변2

내 제안은 다음과 같습니다.

sed -E 's/([0-9]{4})([0-9]{2})([0-9]{2})[0-9]{6}Z/\1-\2-\3/' file

산출:

  Name: cust foo
  mail: [email protected]
  Account Lock: FALSE
  Last Password Change: 2017-07-21
----------------------------------------
  Name: cust xyz
  mail: [email protected]
  Account Lock: TRUE
  Last Password Change: 2018-12-10
----------------------------------------
  Name: cust bar
  mail: [email protected]
  Account Lock: FALSE
  Last Password Change: 2017-04-12
----------------------------------------
  Name: cust abc
  mail: [email protected]
  Account Lock: FALSE
  Last Password Change: 2019-10-30
----------------------------------------

답변3

awk다음 명령을 사용하여 이 작업을 수행 할 수 있었습니다 .

awk -F\: '$1 ~ /Last Password Change/{ OFS=":"; $2 = substr($2, 1, 5)"-"substr($2, 6, 2)"-"substr($2, 8, 2) }1'

필드 구분 기호 로 사용되며 :첫 번째 열이 일치하면 Last Password Change이를 사용하여 substr연도, 월, 날짜를 추출하고 두 번째 열을 원하는 형식의 이러한 값으로 바꿉니다.

관련 정보