![문자열, 점, 두 글자가 차례로 오는 Vim의 모든 문자열을 일치시키시겠습니까?](https://linux55.com/image/198972/%EB%AC%B8%EC%9E%90%EC%97%B4%2C%20%EC%A0%90%2C%20%EB%91%90%20%EA%B8%80%EC%9E%90%EA%B0%80%20%EC%B0%A8%EB%A1%80%EB%A1%9C%20%EC%98%A4%EB%8A%94%20Vim%EC%9D%98%20%EB%AA%A8%EB%93%A0%20%EB%AC%B8%EC%9E%90%EC%97%B4%EC%9D%84%20%EC%9D%BC%EC%B9%98%EC%8B%9C%ED%82%A4%EC%8B%9C%EA%B2%A0%EC%8A%B5%EB%8B%88%EA%B9%8C%3F.png)
예를 들어, 약 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