Visual Studio Code'da yinelenen satırları nasıl kaldırabilirim?


118

Aşağıdaki metne sahip olduğunuzu varsayalım:

abc
123
abc
456
789
abc
abc

Tüm "abc" satırlarını kaldırmak ve bir tane tutmak istiyorum. Sıralamaya aldırmıyorum. Sonuç şöyle olmalı:

abc
123
456
789

Yanıtlar:


224

Satırların sırası önemli değilse

Halihazırda değilse, satırları alfabetik olarak sıralayın ve şu adımları uygulayın:
(bu ilgili soruya göre: Normal İfadeleri kullanarak bir dosyadan yinelenen satırları nasıl bulur ve kaldırırım? )

  1. Control+F

  2. "Modu değiştir" i açın

  3. "Normal İfade Kullan" ı ( .*sembollü simge) açın

  4. Gelen arama alanına yazın^(.*)(\n\1)+$

  5. " Değiştir " alanına yazın$1

  6. Tümünü Değiştir düğmesi("Tümünü Değiştir") öğesine tıklayın .

Hatlarının sıpanşın olduğu önemli yani sıralama olamaz

Bu durumda, ya VS Code dışındaki bir çözüme başvurun ( buraya bakın ) ya da - belgeniz çok büyük değilse ve Tümünü Değiştir düğmesine spam göndermekten çekinmiyorsanız - önceki adımları izleyin, ancak 4. ve 5. adımlarda, bunları girin:
( Sıralama yapmadan belirli yinelenen satırları kaldırmaya göre )

Dikkat: Çok fazla satıra (1000+) sahip dosyalar için bloklar; VS Code'un çökmesine neden olabilir; bazı durumlarda boş satırlar ekleyebilir.

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

  • şununla değiştir :$1

ve sonra yinelenen durumlar kadar "Tümünü Değiştir" düğmesini tıklayın .

Düğmeye tıkladığınızda satır sayısının azalması durduğunda bunun yeterli olduğunu anlayacaksınız. Buna bir göz atmak için belgenin son satırına gidin.


4
((^[^\S\r\n]*?(?=\S)(?:.*)+$)[\S\s]*?)^\2$(?:\r?\n)?vscode çökmesine neden oldu .... Bir dosyada 229 satır Bul yaptım. :(
Hickory420

@ Hickory420 Makinemde 1000 satır (20 karakter uzunluğunda, rasgele) test ettim ve çarpışma olmadı, ancak her geçişte birkaç saniye boyunca% 100 cpu yüküne sahip bir iplik bloğu. Evet, bu büyük dosyalar için pek pratik değil.
Marc. 2377

Bunun için teşekkürler. Normal ifadeyi açıklar mısınız lütfen ^(.*)(\n\1)+$? Yinelenen satırları kaldırdıktan sonra, csv'de yinelenen ilk sütuna sahip tüm satırlara bakmak ve regex'i değiştirmek istiyorum.
Urvah Shabbir

1
Vay canına, normal ifadede oldukça iyi olduğumu hissediyorum ve bu hala aklımı başımdan aldı, harika cevap !!
electrovir

@UrvahShabbir, bağlantılı Soru-Cevap bölümünde bu normal ifadenin açıklaması verilmiştir . Benimki sadece farklıdır, çünkü \r?diğer cevabın bir kısmı gerçekten gerekli değildir.
Marc. 2377

66

İşte çok ilginç bir uzantı: Transformer

Özellikleri:

  • Benzersiz Hatlar
  • Yeni Belge Olarak Benzersiz Çizgiler
  • Hatları Filtrele
  • Satırları Yeni Belge Olarak Filtrele
  • Satırları Sırala
  • Hatları Uzunluğa Göre Sırala
  • İmlece Hizala
  • CSV'yi hizalayın
  • Kompakt CSV
  • Yeni Belgeye Kopyala
  • Hatları Seçin
  • JSON olarak çizgiler
  • Trim Hatları
  • Yinelenen Satırları Yeni Belge Olarak Say
  • Makrolar

Yinelenen satırları kaldırmak için:

  • Belgeden yinelenen satırları kaldırır

  • Seçim yoksa, seçim veya mevcut blokta çalışır

"Unique Lines" komutunun yanı sıra onunla pek oynamadım ama oldukça iyi yapılmış gibi görünüyor (bir makro kaydediciyi denemek dahil!).


26

@ Marc.2377 yanıtına eklemek için.

Sıra önemliyse ve yinelenen satırların sonuncusunu saklamanız sizin için önemli değilse, yalnızca boş olmayan yinelenen satırları kaldırmak istiyorsanız aşağıdaki normal ifadeyi aramanız yeterlidir.

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

Yinelenen boş satırları da kaldırmak istiyorsanız, *bunun yerine kullanın+

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

ve hiçbir şeyle değiştirin.

Doldurulmuş ara ve değiştir kutusunun ekran görüntüsü

Bu bir çizgi alacak ve ileride daha fazla (belki 0) satır bulmaya çalışacak ve ardından aynı çizgiyi çekecektir. Alınan hattı kaldıracaktır.

Bu sadece tek seferlik bir normal ifadedir. Değiştir düğmesini spam yapmaya gerek yok.


Güzel kısa
angus l

4
Güzel. Bunun ^(.+\n)(?=(?:.*\n)*?\1)yerine, normal ifadeniz beklenmeyen bir yerde boş bir satırı kaldırdığı için öneririm . Yine de oy verildi.
2377

İyi yakalama… OTOH: yinelenen boş satırlar da yinelenir;)
Skeeve

1
@Skeeve Hadi, bu yararlı cevabın için biraz teşekkürler & Daha iyi bir topluluk için hepsi :)
Zaman

1
xxx(?=…)ileriye dönük bir eşleşmedir. Bu nedenle, "xxx" den sonra gelen her şeyin "…" ile eşleştiğinden emin olur, ancak aramayı ilerletmez. (?:…)sadece parantez sayısında yer almayan bir parantezdir. .*\n(muhtemelen boş) bir çizgi için bir kalıptır. *birkaç satır olabileceği, hatta hiç olmadığı anlamına gelir. ?Yıldız işareti sonra ( *) aracı mümkün olduğunca az çizgiler olarak açıkladılar. \1Aşağıdaki gibi , bu ifadenin etkisi, \1bir satır eşleşmesi bulana kadar eşleşmeyen tüm satırları ileriye bakmamızdır \1. Umarım bu anlaşılır olur.
Skeeve

22

Aynı sorunu yaşadım ve "Satırları sırala" Visual Studio Kod paketini buldum. Ayrıntılar için Visual Studio Code pazarına bakın (ör. Satırları sıralama . ).

Bu pakette, benim için bunu yapan "Satırları sıralama (benzersiz)" seçeneği var. Satırın başındaki / sonundaki beyaz boşluklara dikkat edin. Çizgilerin benzersiz olarak kabul edilip edilmeyeceğini etkilerler.


marketplace.visualstudio.com/… de çalışmalıdır.
kcpr

1
Görünüşe göre uzantı artık yinelenen girişleri kaldırma yeteneğine sahip değil. İle birleştiren cevap @ Marc-2377 benim için hile yapmak gibi görünüyor.
Dan Atkinson

12

DupChecker uzantısını yükleyin,F1 ve "Kopyaları Kontrol Et" yazın.

Kopyaları kontrol edecek ve bunları kaldırmak isteyip istemediğinizi soracaktır.


11

Normal bir ifadeyle bulup değiştirmeyi deneyin .

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

  • Değiştirin: $1$2

Birinci grupta bazı varyanslar getirmek mümkündür.


-3

Aslında Visual Studio Code'da değil, ancak çalışırsa çalışır.

  1. Yeni bir Excel elektronik tablosu açın
  2. Verileri bir sütuna yapıştırın
  3. Git Veri sekmesinin
  4. Veri sütununu seçin (henüz yapmadıysanız)
  5. Yinelenenleri Kaldır'ı tıklayın (biraz çubuğun ortasında)
  6. OKYinelenenleri kaldırmak için tıklayın .

Visual Studio Code belirttiğiniz gibi en iyi cevap değil ama dediğim gibi: Çalışırsa çalışır :)


Doğrudan Visual Studio Code'dan çağrılabilen bir komut dosyası sağlayarak bunu daha alakalı hale getirebilirsiniz . Sırayla, bu süreci otomatikleştirir. Mümkün olup olmadığını bilmiyorum, ancak Excel'i açığa çıkan COM arayüzleri aracılığıyla çağıran bir komut dosyası. Bu, bu yanıtı çok daha değerli kılacaktır, çünkü diğer uygulamalardan düzgün şeyler yapmak için yararlanmaya bir örnek olacaktır.
Peter Mortensen
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.