2013-02-21 5 views
1

줄의 첫 번째 인스턴스를 제외한 모든 인스턴스를 삭제하는 방법은 무엇입니까?줄의 첫 번째 인스턴스를 제외하고 모두 삭제

는 예를 들어, 나는 파일의 내용을 통해 확산 이들의

LOADING CONDITION : LIGHTSHIP CONDITION 

여러 가지가 있습니다. 맨 위에있는 첫 번째 인스턴스 만 유지하고 싶습니다.

아이디어 누구?

+0

이미 동일한 질문을하지 않았습니까? 가능한 한 복제본 [행의 첫 번째 인스턴스에만 매달리고 모든 다른 복사본을 삭제] (http://stackoverflow.com/questions/14236226/hanging-only-to-the-first-instance-of-the-line) - 및 - 삭제 - 모든 - 추가 복사본) –

+0

@IngoKarkat - 예, 비슷한. 다른 경우에는 여러 번 반복 된 모든 줄의 첫 번째 인스턴스를 제외한 모든 인스턴스를 삭제하는 데 관심이있었습니다. 그리고 그의 내용은 내가 미리 알지 못한다. 각 복사본을 하나씩 갖고 싶었습니다. 이 경우 내용이 알려진 줄의 첫 번째 복사본 만 제외하고 모두 삭제하려고합니다. 또한, awk/grep /하지 않고 그것을하고 싶습니다 ... 그 도구는 일반적으로 Windows에서 사용할 수 없기 때문에. – Rook

+0

@IngoKarkat 하, 내가이 질문을 보았을 때 나는 언젠가 그 전에 언젠가는 대답했다고 느꼈지만 확실하지는 않았다 ... 그 링크를 발견했다 ... – Kent

답변

1

PatternsOnText plugin 명령을 제공 참조 (및 기타입니다 이와 관련된 질문은 매우 간단합니다.

:DeleteDuplicateLinesOf /^LOADING CONDITION : LIGHTSHIP CONDITION$/ 
2
gg (make cursor back to top) 
/LOADING CONDITION : LIGHTSHIP CONDITION (enter) 
n 
:.,$g//d 
+0

나는 어떻게 그것을 "프로그래밍으로"할 수 있는가? 그래서 나는 그것을 스크립트 파일에 넣을 수 있습니다. 272 파일에 대해이 작업을 수행해야합니다. – Rook

+0

vim 함수로 작성할 수 있습니다. btw, 거기 awk/sed 사용할 수 있습니까? 그것은 매우 쉽게 할 것입니다. – Kent

+0

@ldigas는 awk/grep, sry에 대한 귀하의 의견을 보았습니다. – Kent

4

범위와 결합 된 :global 명령을 사용할 수 있습니다.

:0/LOADING CONDITION/+,$g//d 

설명 :

  • [range]g/{pat}/{cmd} 실행 기부 라인 범위 내 {pat}, [range] 일치하는 모든 라인의 명령, {cmd}.
  • 0/LOADING CONDITION/ 첫 행부터 시작하면 1로 가정 할 수 있기 때문에 단지 + 단락 될 수있는 첫 번째 인스턴스
  • +1 아래 범위 1 줄을 시작 0/LOADING CONDITION/+1 패턴 LOADING CONDITION
  • 를 찾는.
  • ,$ 범위의 끝 $
  • g// 마지막 검색 패턴을 사용하여로 심판으로하는 파일의 마지막 줄 것이다. 이 경우 범위
  • :delete 줄여서 :d의 패턴은 전직 자세한 내용은 라인

을 삭제하는 데 사용 명령

:h :g 
:h :d 
:h range 
+0

장엄한! 나는 매일 Vim에 대해 뭔가를 배웁니다. –

+0

훌륭한 설명과 범위의 일부로 '/ {pattern} /'을 영리하게 사용합니다. –

관련 문제