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;'