2012-05-09 4 views
2

다음과 같이 끝나는 문장이있는 파일이 있습니다. \@.Next sentence. 나는 그 기간 이후에 공백을 넣고 싶다.sed를 사용하여 마침표 뒤에 공백을 삽입하십시오.

\@.의 모든 경우에는 공백이 없으므로 정규식에서 마침표 다음의 문자가 대문자인지 확인합니다.

기간이 끝난 후 한 문자 만 검사하기 때문에 \@.에서 \@.으로 바꿀 수는 없으며 어떤 문자가 마침표 뒤에 나오는지 모르기 때문에 붙어 있습니다. 현재

내 명령을

내가 대체 정규식에 사용할 일치하는 문자열의 마지막 문자를 잡을 수있는 방법
sed -i .bak -E 's/\\@\.[A-Z]/<SOMETHING IN HERE>/g' *.tex 

?

편집 : 기록을 위해, 내가 sed의 BSD 버전 (나는 OS의 X를 사용하고 있습니다) 사용하고 있습니다 - 내 previous question regarding sed에서 분명히 나오지 BSD (또는 적어도, 애플 버전은) 항상 좋은 재생되지 않습니다 GNU sed 정규 표현식.

답변

3

오른쪽 명령이 있어야한다 비어있는 공백이 방금 발견됨).

+0

이것은 작동하지 않습니다 :'echo '\ @. N | \ @. Q '| sed -E 's/\\\ @. (\ S)/\\\ @. \ 1/g ''은'\ @. N | \ @을 반환합니다. Q'('\ @. N | \ @. Q'; 공백이 삽입되지 않음). – simont

+0

원하는 결과를 얻었 기 때문에 이상합니다. 나는 sed 4.2.1을 실행 중이다. 어떤 버전이 당신 것입니까? –

+0

'gsed'를 사용하면 정확합니다; 그건 효과가 있어요. 감사합니다 – simont

0

나는 다음과 같은 올바른있을 거라고 생각 :이 뒤에 공백되어 있지 않은 경우

s/\\@\.[^\s]/\\@. /g 

만 발현을 교체합니다.

sed -i.bak -E "s/\\\@.(\S)/\\\@. \1/g" *.tex 

그것을 파크, 당신은 비 공백 (\S) 다음에 어떤 \@ 일치 '\@ ' 플러스하여 함께 전체 일치를 대체하여 만든 것 (공백을 삽입 :

+0

이것은 작동하지 않는 것으로 보입니다 :'echo '\ @. N | \ @. Q '| sed -E 's/\ @. [^ \ s]/\ @./g''는 나에게'\ @를 준다. | \. Q' (N을 씹어). – simont

1

사용이 나오지 명령을

sed -i.bak -E 's/(\\@\.)([A-Z])/\1 \2/g' *.tex 

또는 더 나은 :

sed -i.bak -E 's/(\\@\.)([^ \t])/\1 \2/g' *.tex 

\@. 어떤 공백 문자 (단지 수도없는 편지) 다음에하지 경우 공백을 삽입합니다.

0

이 당신을 위해 작동 될 수 있습니다

sed -i .bak -E 's/\\@\. \?/\\@. /g' *.tex 

설명 :

이 공간을 공백으로 교체가 있다면

, 그렇지 않으면 공백을 삽입합니다.

관련 문제