2013-04-22 4 views
1

sed를 사용하여 텍스트 파일 내의 특정 마침표를 바꾸려고합니다. 내가 할 노력하고있어sed로 문자로 둘러싸인 마침표 바꾸기

a.b 
aa.bb 
aa. b 
a . b 

문자 바로 전 오른쪽 '§'와 그 후이 기간을 대체하는 것입니다 : 내 파일은 다음과 같은 것입니다. 이 경우 "a.b"및 "aa.bb"입니다. 나는 그렙와 함께 할 관리하고 나오지도했습니다

egrep '[[:alpha:]]\.[[:alpha:]]' | sed 's/\./§/g' 

그러나 그것은 나에게 파일을 조작하는 진행하지 없습니다. 내가

sed 's/[[:alpha:]]\.[[:alpha:]]/§/g' 

을 시도한다면 대신 "a§b"의 "§"을 "a.b"와 같은 문자열을 대체 할 것이다.

도움말에 감사드립니다.

답변

3

부품을 "붙잡고"다시 인쇄해야합니다.

sed 's/\([[:alpha:]]\)\.\([[:alpha:]]\)/\1§\2/g' 

형식 \([[:alpha:]]\)\.\([[:alpha:]]\)XXX.YYY을 나타냅니다. 그런 다음 \1§\2, 첫 번째 부분은 \1, 두 번째 부분은 \2 ... \(... \) 사이입니다.

당신이 더 많은 정보를 원한다면,이 참조 당신을 도울 수 있습니다 RegExp - keeping parts of a pattern in sed 어떤 이유로 sed를 들어

+1

일을 직접 포인트! – Kent

+1

@Roadhouse,이 답변 또는 kch 님이 문제를 해결 한 경우 그 중 하나를 수락하는 것이 좋습니다. 그러면 문제가 완료되었으며 다음 사람이이 페이지에 들어갈 때 유용합니다. – fedorqui

0

이 나를 좋아하지 않는다, 그러나 여기 perl와 같은 일이 :

perl -pe 's/(\w)\.(\w)/$1§$2/g' 

정규 표현식 기능이 당신이 찾고있는 것은 "캡처"라고합니다.

업데이트 : 어떤 이유로 -Esed 필요했습니다 :

sed -E 's/([[:alpha:]])\.([[:alpha:]])/\1§\2/g' 
관련 문제