2015-01-28 2 views
1

내가 좋아하는 .elf 확장자를 가진 파일의 목록을 가지고이vim 정규 표현식에 어떤 문제가 있습니까?

file1.elf file2.elf file3.elf

내가 run file1.elf >file1.log처럼 실행 명령 쉘에서 실행할 및 .LOG와 파일 이름을 가진 로그 파일에 결과를 얻기 위해 노력하고 있어요 부가. 내 파일 목록이 너무 큽니다. 나는 vim 정규 표현식을 시험해보기 때문에 파일 이름이 file1file1.elf에 일치하므로 로그 파일의 이름을 만들 때 사용합니다. 내가 .elf에 의해 진행되는 텍스트와 일치하고 \1에서 그것을 유지하려고 여기이

s/\(\(\<\w\+\)\@<=\.elf\)/\1 >\2\.log/

처럼 노력하고 있어요, 난 것 그것과 \2 내가 바라고있는 entrire 파일 이름이 될 것으로 기대 단지 확장명을 뺀 파일 이름을 포함하십시오. 그러나 이것은 나를 준 run file1 >file1.run 즉, \1 복용량 전체 파일 이름을 가지고 있지 않다, 그것은 어떤 방법을 놓친 .elf 확장을 제공합니다. 적절한 결과를 얻으려면 \1\.elf 할 수 있지만 예상대로 작동하지 않는 이유가 궁금 해서요?

답변

2

일치 패턴에서 \@<=을 사용합니다. 이것은 긍정적 인 lookbhead 어설 션입니다. 제로 폭

가 일치 앞의 원자

을 다음과 어떤 중요한 부분은 제로 폭와 그 일치, 이것은 당신이 무엇이라고 직전에 일치하는 경우, 문서 (:help /\@<=1)에 따라 경험적으로, .elf (후속)은 일치하지만 0 widht이므로 \1에는 접미사 .elf이 포함되지 않습니다.

대신, 여기

%s/\v(.*)\.elf$/run \1.elf > \1.log/ 

함께 갈 쉬울 것, 내가 매우 마법 (:help magic)를 켭니다 \v을 사용했습니다. 이 기능을 사용하면 그룹화 괄호를 사용할 때 그 백 슬래시가 필요하지 않습니다.

그런 다음 일치하는 각 파일 접미사 것으로 보인다

\.elf$ 때까지 파일 이름까지를 저장하는 (.*)있다.

대체 부분에서 / 다음에 run 다음에 \1이 오는 문자를 추가합니다. \1은 저장된 파일 이름으로 바뀝니다 (.elf 접미사 제외).

+0

또는 file1.elf 앞에 공백 문자를 넣은 다음 % s/\ v (\ s \ S \ +) (\.elf) $/run \ 1 \ 2> \ 1.log / – Steve

1

\@<=은 무의미하고 불필요한 것처럼 보입니다. 제거하면 원하는 동작을 얻을 수 있습니다.

+0

당신 말이 맞습니다. \ @<= 여기에는 필요 없습니다. 나는 지금 깨닫는다. 내 목록에 다른 확장자가있는 다른 파일이 많이 있었을 때이 특정 표현을 사용했음을 기억합니다. 나는 표현이 단순화 될 수 있다는 것을 깨닫지 못했다. 내가 원하지 않는 파일을 먼저 삭제 한 다음 더 간단한 표현식을 사용하면 – Gautam

관련 문제