파일의 날짜 출력 변경

파일의 날짜 출력 변경

2008년 4월 26일 txt 파일의 항목을 2008년 4월로 변환하고 싶습니다.

참고: 이것은 date 명령을 사용하지 않으며 파일의 날짜 항목입니다.

sed를 사용하여 이 작업을 수행할 수 있나요?

이것은 파이프 등을 사용하는 한 줄 스크립트의 일부입니다.

답변1

sed아니요, 프로세스에서 날짜를 구문 분석해야 하기 때문에 작동하지 않습니다 .

명령 조합을 사용하여 이 작업을 수행할 수 있습니다 date. 또는 개인적으로 다음과 같이 perl사용할 수 있습니다. 이렇게 사용할 수 있지만 날짜 구문 분석을 수행하는 모듈 sed도 있습니다 .Time::Piece

실행 가능한 예:

#!/usr/bin/env perl
use strict;
use warnings;

use Time::Piece; 

while ( <DATA> ) {
   chomp; 
   print Time::Piece->strptime($_, "%d/%m/%Y")->strftime("%B %Y"),"\n";
}

__DATA__
26/04/2008
26/05/2008
26/07/2009

파이프라인에서 "하나의 라이너"로 사용할 수 있습니다(또는 마지막에 매개변수로 처리할 파일을 지정할 수 있습니다).

perl -MTime::Piece -nle 'print Time::Piece->strptime($_, "%d/%m/%Y")->strftime("%B %Y");'

참고 - 두 가지 모두 날짜가 한 줄에 하나만 있다고 가정합니다. 필요한 경우 하위 문자열로 추출하는 것은 특별히 어렵지 않으며 하위 문자열 패턴으로 효과적으로 "sed"될 수 있습니다.

#!/usr/bin/env perl
use strict;
use warnings;

use Time::Piece; 

while ( <DATA> ) {
   s|(\d{2}/\d{2}/\d{4})|Time::Piece->strptime($1, "%d/%m/%Y")->strftime("%B %Y")|e;
   print;
}

__DATA__
26/04/2008 and some text here 
a line like this with a date of 26/05/2008 
26/07/2009 and some more here maybe 

다음과 같이 바뀔 것입니다:

April 2008 and some text here 
a line like this with a date of May 2008 
July 2009 and some more here maybe

다시 한 줄은 다음과 같습니다.

perl -MTime::Piece -pe 's|(\d{2}/\d{2}/\d{4})|Time::Piece->strptime($1, "%d/%m/%Y")->strftime("%B %Y")|e;'  

관련 정보