문자열, 점, 두 글자가 차례로 오는 Vim의 모든 문자열을 일치시키시겠습니까?

문자열, 점, 두 글자가 차례로 오는 Vim의 모든 문자열을 일치시키시겠습니까?

예를 들어, 약 800줄 길이의 다양한 도메인 이름이 포함된 파일이 있습니다. 우리는 vim을 사용하여 www.example.**로 시작하는 모든 도메인 이름을 빠르게 찾고 싶습니다. 여기서 **는 임의의 유형의 두 글자입니다.

example.site"
example.link]"
example.example'
example.ex'
example.xx]"'

이제 vim에서 용어를 사용하여 검색할 수 있습니다 . 하지만 위의 예에서 찾을 example.수 있도록 일치시키기 위해 와일드카드를 어떻게 사용합니까 ?example.ex' and example.xx]"

우리는 이렇게 문자열을 강조하고 싶지 않습니다

> example.site" 
> example.link]" 
> example.example'

그냥 example.ex and example.xx (다른 모든 문자열을 제거하고 고유하게 일치하는 문자열을 유지할 수 있다면 더 좋을 것입니다)

답변1

당신이 사용할 수있는:

/example\.\w\w\W

"예시"를 검색해 보세요. 두 개의 "단어 문자" \w와 "비단어 문자"가 차례로 옵니다.\W

패턴과 일치하지 않는 모든 행을 삭제하려면 다음을 수행하세요.

:v/example\.\w\w\W/delete

그렇지 않으면:

:v/example\.\w\w\W/d

또는 부정과 함께 g[lobal] 명령을 사용하십시오 !.

:g!/example\.\w\w\W/d

위의 세 가지 명령은 다음과 같습니다.

example.site"
example.link]"
example.example'
example.ex'
example.xx]"'

다음을 입력하세요:

example.ex'
example.xx]"'

고쳐 쓰다

이러한 패턴이 같은 줄에 있는 경우를 처리하려면 다음과 같이 하세요.

example.site"
example.example' example.ex' example.link]"
example.xx]"'

다음 검색 패턴을 사용할 수 있습니다.

/example\.\w\w\w[^ ]* \?

"예"를 찾는 방식으로 작동합니다. 세 개의 "단어 문자" 뒤에 임의 개수의 문자가 옵니다.아니요공백 [^ ]*이고 선택적으로 공백으로 종료됩니다 \?.

따라서 일치하는 항목을 아무것도 없는 것으로 바꿀 수 있습니다. 즉, g찾은 첫 번째 일치 항목뿐만 아니라 줄의 모든 일치 항목에 대체 항목이 적용된다는 의미입니다.

:%s/example\.\w\w\w[^ ]* \?//g

얻으려면 :


example.ex' 
example.xx]"'

( 다음을 사용하여 빈 줄을 제거할 수도 있습니다 :g/^$/d.|:%s/example\.\w\w\w[^ ]* \?//g | %g/^$/d

관련 정보