vim 정규식 질문

wonhyukc의 이미지

하루한정 대방출 섬머세일 하루한정 대방출

---------------------

이런 글이 있을 때 < 로 시작해서 > 로 끝나는 것만 삭제하고 싶습니다.
%s<.*>//g
로 했더니 첫줄 전체가 다 삭제 되는데 어떻게 하면 첫줄에서 와 만 삭제할 수 있을까요? 혹은 는 다시 처리하더라도 만 제대로 삭제할 방법은 뭘까요?

Prentice의 이미지

<foo> bar <baz>

이런 경우라고 가정하고 적어보겠습니다.

문제 발생 원인은, * 수량자(?)가 "greedy"하게 작동하기 때문입니다. .*을 최대한 넓게(?) 잡으려고 하기 때문에, oo> bar <baz 전체가 .*에 잡히게 되는 것입니다.

당장 생각나는 해결책은:

  1. . 대신에 "닫는 >"가 아닌 모든 문자 검색
    • :%s/<[^>]*>//g
  2. Non-greedy 수량자 사용
    • :%s/<.\{-}>//g
wonhyukc의 이미지

덕분에 잘 해결 했습니다.