Visual Studio Code에서 중복 된 줄을 제거하려면 어떻게해야합니까?


118

다음 텍스트가 있다고 가정합니다.

abc
123
abc
456
789
abc
abc

모든 "abc"줄을 제거하고 하나만 유지하고 싶습니다. 나는 정렬에 신경 쓰지 않는다. 결과는 다음과 같아야합니다.

abc
123
456
789

답변:


223

줄 순서가 중요하지 않은 경우

사전 순으로 행을 정렬하지 않은 경우 사전 순으로 정렬하고 다음 단계를 수행합니다.
(관련 질문에 따라 정규식을 사용하여 파일에서 중복 된 행을 어떻게 찾고 제거합니까? )

  1. Control+F

  2. "바꾸기 모드"전환

  3. "정규식 사용"( .*기호가 있는 아이콘 )을 전환합니다.

  4. 에서 검색 필드에 입력^(.*)(\n\1)+$

  5. " 바꿀 내용 "필드에 다음을 입력합니다.$1

  6. 모두 바꾸기 버튼( "모두 바꾸기")를 클릭합니다 .

줄 순서 중요해서 정렬 할 수없는 경우

이 경우 VS Code 외부의 솔루션 ( 여기 참조 )을 사용하거나-문서가 너무 크지 않고 모두 바꾸기 단추를 스팸해도 괜찮다면 이전 단계를 따르되 4 단계와 5 단계에서 수행하십시오. 다음을 입력하십시오
( 정렬하지 않고 특정 중복 줄 제거 기준 )

주의 : 너무 많은 줄 (1000+)이있는 파일에 대한 블록; VS 코드가 충돌 할 수 있습니다. 경우에 따라 빈 줄이 생길 수 있습니다.

  • 검색 :((^[^\S$]*?(?=\S)(?:.*)+$)[\S\s]*?)^\2$(?:\n)?

  • 다음으로 대체 :$1

그런 다음 중복 항목이있는만큼 "모두 바꾸기"버튼을 클릭합니다 .

버튼을 클릭했을 때 줄 수가 줄어들지 않으면 충분하다는 것을 알 수 있습니다. 문서의 마지막 줄로 이동하여 계속 확인하십시오.


4
((^[^\S\r\n]*?(?=\S)(?:.*)+$)[\S\s]*?)^\2$(?:\r?\n)?내 vscode 충돌을 만들었습니다 .... 한 파일에서 229 줄 찾기를했습니다. :(
Hickory420

@ Hickory420 내 컴퓨터에서 1000 줄 (20 자 길이, 무작위)로 테스트했는데 충돌이 없었지만 실제로 각 패스에서 몇 초 동안 100 % CPU로드로 스레드가 차단되었습니다. 예, 대용량 파일에는 실용적이지 않습니다.
Marc.2377

감사합니다. 정규식에 대해 설명해 주시겠습니까 ^(.*)(\n\1)+$? 중복 행을 제거한 후 csv에서 첫 번째 열이 중복 된 모든 행을보고 정규식을 수정하고 싶습니다.
Urvah Shabbir

1
와우 나는 정규식을 꽤 잘하는 것 같고 이것은 여전히 ​​내 마음을 사로 잡았습니다.
electrovir

@UrvahShabbir, 해당 정규식에 대한 설명은 연결된 Q & A에 나와 있습니다. 내 \r?대답은 다른 답변 의 비트가 실제로 필요하지 않다는 점에서만 다릅니다 .
Marc.2377

66

다음은 매우 흥미로운 확장입니다. Transformer

풍모:

  • 고유 한 라인
  • 새 문서로 고유 한 줄
  • 필터 라인
  • 줄을 새 문서로 필터링
  • 라인 정렬
  • 길이로 줄 정렬
  • 커서에 정렬
  • CSV 정렬
  • 컴팩트 CSV
  • 새 문서로 복사
  • 라인 선택
  • 라인을 JSON으로
  • 트림 라인
  • 중복 라인을 새 문서로 계산
  • 매크로

중복 줄 제거 :

  • 문서에서 중복 된 줄을 제거합니다.

  • 선택이없는 경우 선택 또는 현재 블록에서 작동

"Unique Lines"명령 외에는 많이 사용하지 않았지만 꽤 잘된 것 같습니다 (매크로 레코더 시도 포함!).


26

@ Marc.2377의 답장에 추가하려면.

순서가 중요하고 중복 된 줄의 마지막 줄만 유지하는 데 신경 쓰지 않는 경우 비어 있지 않은 중복 줄만 제거하려면 다음 정규식을 검색하면됩니다.

^(.+\n)(?=(?:.*\n)*?\1)

중복 된 빈 줄도 제거하려면 *대신 사용하십시오.+

^(.*\n)(?=(?:.*\n)*?\1)

아무것도 교체하지 마십시오.

채워진 검색 및 바꾸기 상자의 스크린 샷

이것은 한 줄을 취하고 더 많은 (아마도 0) 줄을 찾은 다음 정확히 동일한 줄을 찾으려고 시도합니다. 취한 선을 제거합니다.

이것은 일회성 정규식입니다. 교체 버튼을 스팸 할 필요가 없습니다.


멋지게 간결함
angus l

4
좋은. ^(.+\n)(?=(?:.*\n)*?\1)대신 정규식이 예상치 못한 빈 줄을 제거했기 때문에 권장 합니다. 어쨌든 찬성했습니다.
Marc.2377

풍어 ... OTOH : 중복 빈 줄도 중복입니다)
Skeeve

1
@Skeeve 어서, 도움이되는 답변 및 더 나은 커뮤니티를위한 모든 것에 감사드립니다. :)
Zaman

1
xxx(?=…)미리보기 경기입니다. 따라서 "xxx"뒤에 오는 모든 것이 "…"와 일치하지만 검색을 진행하지는 않습니다. (?:…)대괄호 수에 포함되지 않는 대괄호입니다. .*\n(비어있을 수도 있음) 줄의 패턴입니다. *여러 줄이있을 수도 있고 없을 수도 있음을 의미합니다. ?별표 후 ( *) 수단 우리는 가능한 한 적은 수의 선으로 원하는. 로 \1이 식을 다음과 효과는 우리가 일치하지 않는 모든 라인에 대해 미리 보는 것입니다 \1우리가 라인 매칭을 찾을 때까지 \1. 이것이 분명해지기를 바랍니다.
Skeeve

22

방금 동일한 문제가 발생하여 Visual Studio Code 패키지 "Sort lines"을 발견했습니다. 자세한 내용은 Visual Studio Code 마켓 플레이스를 참조하세요 (예 : 정렬 라인 ).

이 패키지에는 "Sorting lines (unique)"옵션이 있습니다. 줄의 시작 / 끝에있는 모든 공백을 처리하십시오. 라인이 고유 한 것으로 간주되는지 여부에 영향을줍니다.



1
확장 프로그램에 더 이상 중복 항목을 제거하는 기능이없는 것 같습니다. @ Marc-2377 의 답변 과 결합하면 나를 위해 트릭을 수행하는 것 같습니다.
Dan Atkinson

12

DupChecker 확장을 설치하고를 누르고F1 "중복 확인"을 입력합니다.

중복을 확인하고 제거 할 것인지 묻습니다.


11

정규식을 찾아서 바꾸십시오 .

  • 찾기: ^(.+)((?:\r?\n.*)*)(?:\r?\n\1)$

  • 바꾸다: $1$2

첫 번째 그룹에 약간의 차이를 도입 할 수 있습니다.


-3

실제로 Visual Studio Code에서는 아니지만 작동하면 작동합니다.

  1. 새 Excel 스프레드 시트 열기
  2. 데이터를 열에 붙여 넣기
  3. 데이터 탭으로 이동
  4. 데이터 열 선택 (아직 선택하지 않은 경우)
  5. 클릭 중복 제거 (다소 줄의 중간을)
  6. OK중복을 제거 하려면 클릭하십시오 .

Visual Studio Code를 지정 했으므로 가장 좋은 대답은 아니지만 내가 말했듯이 작동하면 작동합니다. :)


Visual Studio Code에서 직접 호출 할 수 있는 스크립트제공하여 관련성 을 높일 수 있습니다. 즉,이 프로세스를 자동화합니다. 가능한지 모르겠지만 노출 된 COM 인터페이스를 통해 Excel을 호출하는 스크립트입니다. 이것은 다른 응용 프로그램을 활용하여 깔끔한 작업을 수행하는 예이므로이 답변을 훨씬 더 가치있게 만들 것입니다.
Peter Mortensen
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.