2014-09-29 7 views
1

그래서 내가는 <p></p> 에 나오지

1111년 1월 1일에서 텍스트 파일의 모든 날짜를 변경하려고 (월, 일, 년)로 다른 형식으로 파일의 날짜 문자열을 변경하려고 1111 년 1 월 1 일
sed 's/[0-9]\{1\}-[0-9]\{1\}-[0-9]\{4\}/date -d"+%B +%d, +%Y"/g' 

"날짜"에서 형식을 지정하는 방법을 모르겠습니다. 다른 작은 따옴표를 추가하면 제대로 작동하지 않습니다. 그대로가 제대로 작동하지 않습니다하지만 난 당신의 예에서

sed's///g' 

답변

2

하반기에

date -d"+%B +%d, +%Y" 

을 사용하려는 알고, 당신은 그 이유를의는 나오지 표현을 보호하기 위해 간단한 견적을 사용 내부에 다른 간단한 따옴표를 사용할 수 없습니다 (이 경우에는 이스케이프가 없습니다).

sed가 GNU sed 인 경우. here과 같이 sed 명령 내에서 외부 명령/도구와 일치하는 그룹을 전달하기 위해 'e'를 사용할 수 있습니다.

하지만 각 경기에 대해 외부 명령을 호출해야합니다. 텍스트가 많은 날짜를 포함하고 있다면이 솔루션은 느려질 수 있습니다. (Time::Piece를 사용하여) 구조에

sed -r 's#([0-9]{1,2})-([0-9]{1,2})-([0-9]{4})#date -d"\1/\2/\3" +"%B %d, %Y"#e' 
+0

실행 script.sh로 저장

, 다음 SED 스크립트를 생성합니다. 나는 또한 이러한 오류가 발생 sh : 1 : 구문 오류 : "(예기치 않은 sh : 1 : 구문 오류 : 인용 부호가없는 문자열 – user3347022

+0

unterminated 그래서 awk 또는 perl 더 적합하다고 생각합니다. choroba 응답을 고려하십시오. awk있는 다른 예제를 제공 할 수 있습니다. 만약 당신이 선호한다면 – mcoolive

+0

나는 그것을 위해 sed를 사용해야한다. 나는 다른 것들에 대해 아무것도 알지 못하지만 훨씬 더 나은 경로가 있다는 것에 동의 할 것이다.하지만이 목적을 위해서 나는 sed, tr, grep, cut, paste를 사용해야한다. 하나의 급습로 텍스트 문서 내의 날짜를 수정할 수 있습니다. – user3347022

0

펄 : 당신은 라인별로 하나의 날짜가있는 경우

, 나는 다음과 같은 스크립트를 제안

perl -MTime::Piece -pe 'BEGIN { @months = (undef, Time::Piece::mon_list()) } 
         s/([0-9]{1,2})-([0-9]{1,2})-([0-9]{4})/$months[$1] $2, $3/g' <input> output 
+0

나는 그것을 위해 sed를 사용해야한다.나는 다른 사람들에 대해 아무것도 모르고 있지만 더 나은 경로가 있다는 것에 동의 할 것이지만이 목적을 위해서 나는 sed, tr, grep, cut, paste를 사용해야 만한다. 텍스트 문서 내에서 날짜를 수정하기 위해 한 번만 지나갈 수 있다고 생각했습니다. Perl은 내가하는 많은 일들을 수행하는 데 도움이 될 것 같지만 위에서 언급 한 길드 라인을 사용해야합니다. sooo sooo 고맙습니다! – user3347022

1

당신은 떠들썩한 파티에서 나오지도 스크립트를 생성 할 수 있습니다 외부 도구 호출을 피하십시오.

#!/bin/bash 

idx=12 
for month in Dec Nov Oct Sep Aug Jul Jun May Apr Mar Feb Jan ; do 
    echo "s/$idx-\([0-9]\{1,2\}\)-\([0-9]\{4\}\)/$month \1, \2/g" 
    ((idx--)) 
done 

121Feb으로 변환되지 않도록 지시하십시오. 나는 단지 한 줄에 하나의 날짜를하지만 나뿐만 아니라 전화 번호와 지역 번호가 있나요 그런

s/12-\([0-9]\{1,2\}\)-\([0-9]\{4\}\)/Dec \1, \2/g 
s/11-\([0-9]\{1,2\}\)-\([0-9]\{4\}\)/Nov \1, \2/g 
s/10-\([0-9]\{1,2\}\)-\([0-9]\{4\}\)/Oct \1, \2/g 
s/9-\([0-9]\{1,2\}\)-\([0-9]\{4\}\)/Sep \1, \2/g 
s/8-\([0-9]\{1,2\}\)-\([0-9]\{4\}\)/Aug \1, \2/g 
s/7-\([0-9]\{1,2\}\)-\([0-9]\{4\}\)/Jul \1, \2/g 
s/6-\([0-9]\{1,2\}\)-\([0-9]\{4\}\)/Jun \1, \2/g 
s/5-\([0-9]\{1,2\}\)-\([0-9]\{4\}\)/May \1, \2/g 
s/4-\([0-9]\{1,2\}\)-\([0-9]\{4\}\)/Apr \1, \2/g 
s/3-\([0-9]\{1,2\}\)-\([0-9]\{4\}\)/Mar \1, \2/g 
s/2-\([0-9]\{1,2\}\)-\([0-9]\{4\}\)/Feb \1, \2/g 
s/1-\([0-9]\{1,2\}\)-\([0-9]\{4\}\)/Jan \1, \2/g 

,

script.sh | sed -f- file