모든 에포크 시간을 찾아서 사람이 읽을 수 있는 시간(밀리초)으로 바꾸고 싶습니다. 예를 들어 신기원 시간이 첫 번째 열에 있지만 무작위로 13자리를 검색하여 "23:59:59 01.01.1980"과 같은 시간으로 바꾸는 대신 이 작업을 수행하는 방법에 대한 해결책을 찾았습니다. Linux 시스템에서 수행됩니다.
따라서 시대는 다음과 같이 보일 수 있습니다.
sms address="+********" body="샘플 텍스트입니다.
답변1
나는 다음을 사용할 것이다 perl
:
perl -MPOSIX -pe 's{(?<!\d)([1-9]\d{9})(\d{3})(?!\d)}{
strftime "%FT%T.$2%z",localtime$1}ge' < your-file
이는 0이 아닌 숫자로 시작하고 이 숫자를 초과하지 않는 13자리 시퀀스와 일치하므로 타임스탬프가 2001-09-09T01:46:40.000+0000 - 2286-11-20T17:46:39.999+ 범위에 있다고 가정합니다. 0000 표준 형식을 지웁니다 ( 원하는 대로 형식을 조정할 2021-05-03T15:47:59.300+0100
수 있음 ).strftime()
여전히 타임스탬프에 포함되지 않은 숫자의 형식을 다시 지정하는 경우, 1년 전부터 지금까지와 같이 특정 범위 내의 숫자 형식만 다시 지정하여 오탐의 위험을 줄일 수 있습니다.
perl -MPOSIX -pe '
BEGIN{$start = ($end = time) - 366*24*60*60}
s{(?<!\d)([1-9]\d{9})(\d{3})(?!\d)}{
$start <= $1 && $1 <= $end ?
strftime "%FT%T.$2%z",localtime$1 :
$&
}ge' < your-file