Notepad ++ uygulamasında yinelenen satırları kaldırma


595

Not Defteri ++ 'da yinelenen satırları kaldırmak ve bir satırın tek bir örneğini kaldırmak mümkün mü?

Yanıtlar:


760

Notepad ++, sıraya göre sıralamak ve aynı anda yinelenen satırları kaldırmak istemeniz koşuluyla bunu yapabilir.

TextFX eklentisine ihtiyacınız olacak. Bu daha önce Notepad ++ 'ın eski sürümlerine dahil edilmişti, ancak daha yeni bir sürümünüz varsa, bu öğeyi menüden ekleyebilirsiniz Plugins -> Plugin Manager -> Show Plugin Manager -> Available tab -> TextFX -> Install. Bazı durumlarda da çağrılabilir TextFX Characters, ancak bu aynı şeydir

Onay kutuları ve düğmeleri artık altında menüde görünecek gerekli: TextFX -> TextFX Tools.

"Sıralama çıktıları yalnızca benzersiz ..." seçeneğinin işaretli olduğundan emin olun. Ardından, bir metin bloğu seçin (tüm belgeyi seçmek için Ctrl+ A). Son olarak, "satırları büyük / küçük harfe duyarlı olarak sırala" veya "satırları büyük / küçük harfe duyarlı değil" i tıklayın

n ++ 'da menü düzeni


32
"Yaşına" rağmen inanılmaz derecede güçlü eklenti. Umarım bunu standart NPP eklenti teklifinden ASLA kaldırmazlar. Bu eklentideki tüm özellikleri düşünen adam bir çeşit "vizyoner" idi.
GeertVc

7
Excel'den daha güçlü.
Vasu

6
Notepad ++ x64 sürümü ne olacak? Eklenti TextFX x64 sürümü mevcut değil
Coğrafya

15
TextFx, 64 bit sürümde değil.
Mart'ta Rhyus 0:27

4
@Geograph Ve 64 bit TextFx eklentisi olmayacak bu nota bakın . Bu nedenle, sıralama ve yinelenen kaldırma sağlayan alternatif bir eklenti olup olmadığını bilmek iyi olacaktır.
Robert

641

Notepad ++ Sürüm 6'dan bu yana bu regex'i arama ve değiştirme iletişim kutusunda kullanabilirsiniz:

^(.*?)$\s+?^(?=.*^\1$)

ve hiçbir şeyle değiştirmeyin . Bu, tüm yinelenen satırlardan dosyadaki son olayı bırakır.

Bunun için hiçbir sıralama gerekli değildir ve yinelenen satırlar dosyanın herhangi bir yerinde olabilir!

"Normal ifade" ve ". Newline ile eşleşir" seçeneklerini işaretlemeniz gerekir:

Notepad ++ Diyaloğu değiştir

  • ^ satırın başlangıcıyla eşleşir.

  • (.*?)0 veya daha fazla kez herhangi bir karakterle eşleşir, ancak mümkün olduğunca az (Satırla tam olarak eşleşir, ". newline ile eşleşir" seçeneği nedeniyle bu gereklidir). Eşleşen satır, etrafındaki parantezler nedeniyle saklanır ve\1

  • $ satır sonuyla eşleşir.

  • \s+?^ bu bölüm bir sonraki satırın başlangıcına kadar tüm boşluk karakterleriyle (yeni satırlar!) eşleşir ==> Bu, eşleşen satırdan sonraki yeni satırları kaldırır, böylece değiştirme işleminden sonra boş satır kalmaz.

  • (?=.*^\1$)bu olumlu bir ileri doğru iddiasıdır. Bu regex'in önemli kısmı budur, bir satır sadece dosyada başka bir yeri takip eden aynı satır olduğunda eşleştirilir (ve kaldırılır).


10
oh, bu harika, hatta boş satırları siler, şu an
makrolaştırıyorum

66
Bazı durumlarda bir dosyadaki TÜM satırları kaldırır.
SerG

3
SON olayı kaldırmanın herhangi bir yolu var mı? Bu sonuncusu hariç hepsi ...
Cullub

28
Benim durumumda bu çözümün tüm satırları kaldırdığı, işaretini kaldırması . matches newlinehile yaptı.
Kuitsi

3
@SerG Bazı durumlarda benim için de işe yaramadı, ama "newline maçları" kaldırdığımda yaptı :)
Davidenko

95

Satırlar birbirinin hemen ardındaysa, normal ifadeyi kullanabilirsiniz:

Arama Deseni: ^(.*\r?\n)(\1)+

Şununla değiştir: \1


1
Belki diğerleri bu konuda şansa sahipti, ama benim için ^ (. * \ N) \ 1 "Metni bulamıyorum"
sonucunu verir

4
@ b1naryatr0phy "Arama Modu" nu "Düzenli ifade" olarak ayarladığınızdan emin olun, ben de modeli güncelledim, böylece pencere stili satır sonlarını işleyebilir
Grant Peters

3
notepad ++ 'ın hafif bir normal ifadesi motoru vardır, yalnızca tek bir satırda çalıştığı ve \ r \ n karakterleri için $ kullandığınız için "? veya \ r \ n" değil, gelişmiş işlevlere izin vermez
Stefan Rogin

3
bu birer birer ortadan kalkar. Bunu birçok kez tekrarlamalısınız. > \ N does not işi (birçok değiştirmeler raporları düşünce) - \ n + Acaba neden
Val

2
@Val, eşleşmenin arka referans kısmını 1 veya daha fazla eşleşmeye sahip bir grup yaparsanız, desen her seferinde N bitişik yinelenen satırla ^(.*\r?\n)(\1)+
eşleşir

37

Notepad ++

-> Pencereyi değiştir

Arama modunda Normal ifade radyo düğmesini seçtiğinizden emin olun.

Ne buldun:

^ (. *) (\ R? \ N \ 1) + $

Şununla değiştir:

$ 1

Önce:

ve orada düşünüyoruz

ve orada düşünüyoruz

tek çizgi

mümkün mü

mümkün mü

Sonra:

ve orada düşünüyoruz

tek çizgi

mümkün mü


2
Bunun çalışması için dosyanın sıralanması gerekmiyor mu?
Peter Mortensen

parlak
Remo Liechti

30

Satır sırasını umursamıyorsanız (ki bunu yaptığınızı sanmıyorum), bir Linux / FreeBSD / Mac OS X / Cygwin kutusunu kullanabilir ve şunları yapabilirsiniz:

$ cat yourfile | sort | uniq > yourfile_nodups

Sonra dosyayı yeniden Notepad ++ ile açın.


3
Windows 7'de çalışmıyor.'cat' is not recognized as an internal or external command, operable program or batch file.
Iain Samuel McLean Elder

2
@Iain Elder: cat standart bir Unix yardımcı programıdır, bu nedenle bu cevap linux, FreeBSD ve MacOSX üzerinde çalıştığını belirtir. Cevap ayrıca Cygwyn'i gösteriyor: Bu size unix tarzı bir kabuk veren bir Windows programı ve onunla kedi. Uzun lafın kısası (çok geç!): Win 7'nin bunu yapmak için Cygwin'e ihtiyacı var.
Travis Clark

11
Pencerelerde powershell var:cat yourfile | sort -Unique
Elazar

9
Bunlar "kedinin zahmetli kullanımı" nın güzel örnekleridir. Kedi yardımcı programını unutun ve sadece dosya yönlendirmesini kullanın: sort <yourfile | uniq> yourfile_nodups
scott8035

1
@ scott8035, kedinin bu komutu çalıştırmak için hiçbir faydası olmadığını kabul ediyorum, ancak kedi dosyası gibi bariz olmayan komutların uzun bir dizisini anlamaya çalışırken kediyle başlamayı genellikle yararlı buluyorum | sed ... | sed ... | sed ... vb. Bu yüzden kedi kullanmanın nedenleri olabileceğini söyleyebilirim. Tabii ki kedi sonunda çıkarılabilir, ancak bazıları bunun için çok tembel.
FORTRAN

17

Notepad ++ 'ın sonraki sürümlerinde görünüşe göre TextFX eklentisi bulunmuyor. Eklentiyi kopyaları sıralamak / ortadan kaldırmak için kullanmak için eklentinin indirilmesi ve kurulması (daha fazla dahil) veya eklenti yöneticisi kullanılarak eklenmesi gerekir.

A) Kolay yol ( burada açıklandığı gibi ).

Eklentiler -> Eklenti Yöneticisi -> Eklenti Yöneticisini Göster -> Kullanılabilir sekmesi -> TextFX Karakterleri -> Yükle

B) Başka bir versiyona ihtiyaç duyulursa veya kolay yol çalışmazsa, daha karmaşık bir yol.

  1. Eklentiyi SourceForge'dan indirin:

    http://downloads.sourceforge.net/project/npp-plugins/TextFX/TextFX%20v0.26/TextFX.v0.26.unicode.bin.zip

  2. Zip dosyasını açın ve NppTextFX.dll dosyasını ayıklayın

  3. Yeri NppTextFX.dll : gibi Notepad ++ eklentileri dizinde,
    C: \ Program Files \ Notepad ++ \ plugins

  4. Notepad ++ 'ı başlatın ve TextFX dosya menüsü öğelerinden biri olacaktır (yukarıdaki Colin Pickard tarafından 1 numaralı Cevapta görüldüğü gibi)

TextFX eklentisini yükledikten sonra, kopyaları sıralamak ve kaldırmak için Cevap # 1'deki talimatları izleyin.

Ayrıca, bu komutu sık kullanıyorsanız veya sıralama için TextPad'de F9 gibi bir klavye kısayolunu çoğaltmak istiyorsanız Ayarlar> Kısayol eşleyici'yi kullanarak bir klavye kısayolu oluşturmayı düşünün .


Notepad ++ 7.6'da eklenti eklenmelidir C:\Users\<your_user>\AppData\Local\Notepad++\plugins\NppTextFX. Bunun dışında bu hala iyi çalışıyor.
P_W999

14

Sürüm 7.8'de bunu herhangi bir eklenti olmadan gerçekleştirebilirsiniz - Düzenle -> Hat İşlemleri -> Ardışık Yinelenen Hatları Kaldır. Bu işe başlamadan önce yinelenen satırları ardışık sırada yerleştirmek için dosyayı sıralamanız gerekir, ancak bir cazibe gibi çalışır.

Sıralama seçenekleri Düzen -> Hat İşlemleri -> Sıralama Ölçütü ... altında bulunmaktadır.


7

Bunu yapmak için bir eklentiye ihtiyacınız olabilir. ConyEdit'in komut satırını cc.ddl(yinelenen satırları silin) deneyebilirsiniz . Notepad ++ dahil olmak üzere metin editörleri için bir çapraz editör eklentisidir.

ConyEdit arka planda çalışırken aşağıdaki adımları izleyin:

  1. komut satırını girin cc.ddlmetnin sonuna .
  2. metni ve komut satırını kopyalayın.
  3. Yapıştır, o zaman ne istediğini göreceksin.

Misal
resim açıklamasını buraya girin


5

Normal ifadeyi arayın: \b(\w+)\b([\w\W]*)\b\1\b

Şununla değiştir: $1$2

Hit değiştirin Dosyanda normal ifadeyle artık eşleşme kadar düğmeye.


Bunu denemek için bir test dosyası oluşturdu, ancak normal ifade işi yapmak için güvenilir bir şekilde çalışmadı.
RockPaperLizard

Cevabımı geliştirebilmem için başarısız olan bir örnek verir misiniz?
Hesham Eraqi

4

Hiçbiri benim için çalışmadı.

Bir çözüm:

değiştirmek

^(.*)\s+(\r?\n\1\s+)+$

ile

\1

Bunu denemek için bir test dosyası oluşturdu, ancak normal ifade işi yapmak için güvenilir bir şekilde çalışmadı.
RockPaperLizard

Tüm verilerim için iyi çalıştı, çözümümün ne olduğunu unuttum. Başarısız olan yerlere, diğer kişilerin bu normal ifadeyi iyileştirebilmesi için daha fazla ayrıntı ekleyin.
Manohar Reddy Poreddy

Bir dosya oluşturdum, böylece her satır üzerinde 0-999 arasında bir rasgele sırada, bazen yinelenen bir tamsayı vardı. Çoğaltmaların çoğunu kaldırmadı ve sıralı olmayan kopyaları kaldırmadı.
RockPaperLizard

1
Lütfen çalışan ve çalışmayanlar için 2 örnek veriniz. Birine yardım edecek.
Manohar Reddy Poreddy

1
neden ^(.*)\s+(\r?\n\1\s+)+$olmasın ^(.*)\s*(\r?\n\1\s*)+$?
Mark Ch

2

Eklenti yöneticisi şu anda Notepad ++ için kullanılamıyor (dağıtımla birlikte gelmiyor). Manuel olarak yüklemeniz gerekir ( https://github.com/bruderstein/nppPluginManager/releases ) ve bile, artık birçok eklenti kullanılamaz (TextFX yok) eklentisi.

Belki de gerekli işlevselliği içeren başka bir eklenti var. Bunun dışında, Notepad ++ ile yapmanın tek yolu, eşleştirmek ve değiştirmek için bazı özel regex kullanmaktır ( Ctrl+ FDeğiştir Sekmeyi ).

Edit üzerinden birçok işlev olmasına rağmen menü öğesi (kırpma, boş satırları kaldırma, sıralama, EOL'yi dönüştürme) "benzersiz" bir işlem yoktur.

Windows 10'unuz varsa Bash'ı etkinleştirebilirsiniz (Microsoft Store'a Ubuntu yazın ve yüklemek için açıklamadaki talimatları izleyin) ve kullanın cat your_file.txt | sort | uniq > your_file_edited.txt. Tabii ki "dosya_tosyası.txt" ile aynı çalışma dizininde olmalı ya da onun yolu üzerinden başvurmalısınız.

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.