특정 문자열이 들어간 라인 지우기

imcjswo의 이미지

vi에서 인데요 결론부터 말씀드리면
:g/찾는문자열/d 인데
이 명령의 결과가 어떻게 해서 찾는문자열을 지우는 명령어가 될까요?

g 는 global
d 가 vi의 지우는 명령어

라고 생각은 들지만
:g/찾는문자열/y (찾는 문자열 라인을 찾아 복사)하면 될거 같은데 "찾는문자열"이 들어간 마지막 라인만 복사되고 안되더군요 -_-

pynoos의 이미지

:1,3d

라고 하면, 1~3 번째 줄을 말합니다. 즉, 범위를 지정하는 것인데, 이와 비슷하게

:g/찾는 문자열/

이라고 하면, 가상의 범위, 즉, 찾는 문자열이 들어 있는 줄을 의미하는 것입니다.

의미는 그렇지만, 구현이 어려워서인지 생각을 다르게해야만 합니다.

d 가 중심되는 명령이 아니라 g 가 중심이 되는 명령입니다.
즉, 범위가 사용될 수 있는 모든 곳에 g 로 바꿀 수 있는 것이 아나고, g 를 통해 걸러지는 행마다 어떤 것을 적요하는 것으로 생각하시면됩니다.

따라서 맨 아래의 y 명령은 사실은 각 행마다 적용하였고 맨 마지막만 유효하게 되었다고 생각하시면 됩니다.

익명 사용자의 이미지

다른 방법도 있겠지만, "grep -v 문자열"을 활용하셔도 될 것입니다. vi나 vim에서 버퍼 내용을 grep으로 보내고, 출력 결과를 되돌려 받는 방법에 대해 한번 알아보세요.