Not Defteri ++ 'daki tüm satırları ihtiyacım olan bir kelimeyi içeren satırlar hariç silmek?


Yanıtlar:


292

Bunu başarmanın kolay bir yolu var. 3 adım yapmanız gerekiyor.

  1. Arama menüsü> Bul ...> "İşaretle" sekmesini seçin. Düzenli ifadeleri etkinleştirin. Ara ^<Path>( ^satır başlangıcı içindir). "Satır satırlarını" işaretlemeyi ve "Tümünü İşaretle" ye basmayı unutmayın

    ==> Saklamak istediğiniz Tüm Satırlar Yer İşareti var

  2. "Ara - Yer İşareti - Ters Yer İşareti" Menüsüne gidin

    ==> Silmek istediğiniz tüm satırlar yer imlerine eklenmiştir.

  3. "Ara - Yer İşareti - İşaretlenmiş satırları kaldır" menüsüne gidin

    ==> Tüm Sık Kullanılanlar satırları silindi.


47
+1. Güzel, bunu bilmiyordum. Ayrıca, biraz zaman kazandırabilecek "İşaretlenmemiş satırları kaldır" veya "İşaretli satırları kes / kopyala" seçeneğine de sahiptir.
deizel

6
Başlangıçta sıkıntı yaşadım çünkü Notepad ++ sürümümün (6.2.3) "Mark Tab" isimli bir menü maddesi yoktu. Bunun yerine, "Ara" -> "Bul ..." -> "İşaretle" sekmesine tıklayın. Ve artık yer imlerini tersine çevirmek zorunda değilsin. Notepad ++ şimdi "İşaretlenmemiş Satırları Kaldır" seçeneğine sahiptir. Fakat bahşişiniz bana çok yardımcı oldu! Teşekkürler!
aakoch

22
2. Adımı atlayabilirsiniz, çünkü ("İşaretlenmemiş Satırları Kaldır" seçeneğini seçmek mümkündür (en azından v6.4.5'ten beri).
Julian,

4
Notepad ++ 'ı uzun süredir kullanıyorum ve daha önce' Yer İmleri'nin ne olduğunu asla bilmiyorum. Bu aletin ne kadar güçlü olduğu ve bu cihaz hakkında ne kadar az şey bildiğimden şaşırtıcı.
Danubian Sailor

Sen bir cömertsin. Bu, gerçekte kullandığınız aracı nasıl tanıyacağınıza dair başka bir şok edici örnek.
Marcello Grechi Lins,

67

Bu aslında 6.3'ten itibaren iki adımda yapılabilir. İlk denememde 5,9 olandan daha erken yapılabileceğini düşünüyorum.

Stema'nın gönderisini bu cevabın temeli olarak kullanmak. Şimdi daha az bir adım var. Çizgileri işaretleyin ve işaretlenmemiş çizgileri kaldırın. Bitti. Ayrıntılı talimatlar izleyin.

  1. Arama menüsü "Bul". Bul iletişim kutusunda "İşaretle" sekmesini tıklayın. Düzenli ifadeleri etkinleştirin. Ara ^<Path>( ^satır başlangıcı içindir). "Satır satırlarını" işaretlemeyi ve "Tümünü İşaretle" ye basmayı unutmayın

    ==> Şimdi saklamak istediğiniz tüm Satırlarda bir Yer İşareti var

  2. Arama Menüsü -> Yer İşareti -> İşaretsiz Çizgileri Kaldır.

    ==> Tüm NON İşaretlenmemiş satırlar silinir.


3
Bu bana 10 saniye sürdü, diğer çözüm ise 20 saniyeden fazla sürdü. Teşekkür!
Siyah,

^Arama terimimi eklememe, düzenli ifade kullanmama gerek yoktu . Umarım bu birine yardımcı olur.
sa_leinad

29

Temiz regex sadece çözüm

İki adım değişken

  1. regex yerine

    (?!^.*test.*$)^.+
    

    testi istediğiniz metinle değiştirin

  2. değiştirmek

    [\r\n]{2,}
    

    ile \r\n

Tek kademeli değişken

^(?!<Path>).*\r\nEşleşmeleri boş dizeyle değiştirmek için kullanın . Genelleştirilmiş sürüm olacaktır ^(?!.*?test).*\r\n. Bu, dosyanın sonundaki boş satırı kaldırmaz. Ardışık boş satırlar da dahil olmak üzere diğer tüm satırlar kaldırılır.

Açıklama:

  1. (?!)olumsuz bir görünümdür. ^.*test.*$ istenen metni içeren tüm satırı seçer.

  2. [\r\n]{2,}\r\nWindows New satırı olduğunda, daha sonra gerçekleşenlerle eşleşir . Linux veya başka bir işletim sisteminiz varsa, bununla uğraşmanız gerekebilir. ikincisi, onu bir dönüş çizgisiyle değiştirmektir.


1
Halklara not: Bazen satır sonu (EOL) "işe yaramaz" ile regex. \r\nYazı belirtilen EOL, Windows ya da aradığınızı olabilir ya da olmayabilir, bu nedenle kullanır ve budur. Genellikle Linux ortamlarında sadece \n, ya da Mac ortamlarında sadece \r, yani bir dosyadan birini çekerseniz, Windows tarzı EOL olmaz. Bununla birlikte, FileZilla ve ASCII modu tetikleyicileri yoluyla indirirseniz, tekrar Windows EOL'ye\n dönüştürebilir (gibi \r\n). Öyleyse, regex çalışmıyorsa, "Görünüm> Sembolleri Göster> Satır Sonunu Göster" e giderek EOL stilini kontrol edin. CR = \r. LF = \n.
dhaupin

5

Bana göre en kolay yol, yalnızca "Geçerli Belgede Tümünü Bul" özelliğini kullanmak ve ardından sonuçları yeni bir dosyaya kopyalamak veya tümünü seçip geçerli olanı seçmektir.

Bu, metninizi içeren tüm satırları bulur ve altta listeler. Sadece arama sonucunu sağ tıklayın ve kopyala / yapıştır.


Değiştirerek satır numaralarını kaldırmanız gerekir \tLine [\d]*: . Yine de harika bir cevap.
Noumenon

Bu, Notepad ++ uygulamasının arama sonuçları penceresinde kısaltacağı kadar geniş çizgiler için çalışmaz.
MasterJoe2

4

Menüde Ara -> Bul ... -> Normal ifadeleri etkinleştirin. "^ Yol " için arama yapın (^ satır başlangıcı içindir).

"Geçerli Belgede Tümünü Bul" düğmesine tıklayın.

"Sonuç bul" penceresi, desenin tüm satırlarında görünecektir. Not Defteri ++ 'da bunları yeni bir sekmeye kopyala / yapıştır'ı seçin.

Bu yeni sekmede, aşağıdakilere gidin: menü Arama -> Değiştir ... -> Normal ifadeleri etkinleştirin.

"Neyi bul:" alanında, "Line \ d +:" satırını kullanın. "Şununla değiştir:" alanını boş bırakın.

"Tümünü değiştir" düğmesine tıklayın.


3

<Path>Bir dosya sistemi yolu ile gerçekten eşleşmek istemiyorsanız , bunu Perl kullanarak bir komut satırından deneyebilirsiniz:

perl -pe " if ($_ !~ /<Path>/) { s/$_// } " < in.txt > out.txt

Windows'ta Strawberry Perl ile çalıştı, bu nedenle sonuçlar beklediğiniz gibi değilse buna göre ayarlayın.


3

Sakar, ancak hepsini Excel'e=IF(LEFT(A1,6)="<Path>",A1,"") kopyalayın ve sonra bu formülü sonuna kadar kullanın ve kopyalayın. Sonra onu Notepad ++ 'a geri kopyalayın. İdeal değil ama oldukça kolay (eğer Excel'iniz varsa). Uyarı: Girintili çizgilerle iyi çalışmaz (Excel sütunları vs. değiştirir).


Bu görevi doğrudan ele almanın birkaç yolu olduğunda, neden başka bir uygulamaya imha edici bir şekilde kopyalamak, orada işlemek ve geri aktarmak istiyorsunuz?
Baldrickk

1

Notepad ++ ile istediğinizi yapmanın kolay bir yolu yoktur. Bilgisayarınıza bir program indirmeniz veya VB'de bir şeyler yazmanız gerekir (Sanırım Windows'dasınız).

Sed ile iki yoldan birini istediğinizi yapabilirsiniz. Sed yardımcı programı * nix'te bir favoridir ve Windows için GnuWin'deki harika insanlardan bulunabilir ( http://gnuwin32.sourceforge.net/packages/sed.htm ). Bu programı indirir ve komutunuzu komut isteminden çalıştırırsınız.

İçermeyen tüm satırları sil:
sed -i '/^<PATH>/!d' file

Tüm satırları yeni bir dosyaya yazdır:
sed -n '/^<PATH>/p' file > newfile

İstediğiniz satırları yeni bir dosyaya yazdırmanızı öneririm. Bunun nedeni, muhtemelen ilk defa regex ifadesini almamanızdır. Sed yardımcı programı Normal İfade Temel Sözdizimini kullanır (referansı http://www.regular-expressions.info/reference.html adresinden görüntüleyin ). Bir * nix yolu (/ var / www) gibi bir şey ise, regex'inizin çalışması için / karakterinden kaçmanız gerekir.

Örnek: sed -n '/^\/var\/www/p' file > newfile
Bu, '/ var / www' ile başlayan tüm satırları basacaktır. / Karakterinden kaçmak için dosyalama yapsaydım, komut bir hataya yol açardı. Ters eğik çizgi karakteriyle özel bir karakterden (/ gibi) kaçabilirsiniz.


Bu eski bir cevap olabilir ama aslında inanılmaz derecede 2 oy aldı (şimdi benden -1) sadece ne kadar yanlış olduğu konusunda yorum yapmak istemedi, ancak bir SINGLE komut işleminde tekrar nasıl bir cevap aldım? Bu durumda, bir kelimeyi (ya da cümleyi) içeren 34 satıra kadar kayıt yapın, bu durumda sadece bu regex'i FIND WHAT: ^ (?!. *? error). n ve REPLACE WITH boş bırakarak ". Evet, ayrıca sed ve awk'ı da seviyorum ama NPP'nin bunu yapamayacağını söylemek sadece yanlıştır.
Collin Chaffin

1

Regex yerine daha iyi bir çözüm:

(?!^.*SOMETEXT.*$)^.+\r?\n

Ve hiçbir şey ile değiştirin


1
Süper Kullanıcıya Hoşgeldiniz! Bunu, regex'in her bir parçasının ne yaptığını bilemeyenlere açıklamaya özen gösterin? :)
bertieb

0

Ara-> Değiştir'i kullanın ve normal bir ifade girin ^[^ ].*ve hepsini kullanarak boş bir dize ile değiştirin Regular expression. Sonraki adım boş satırlar için arama bulmaktır \n\nile değiştirerek \nkullanarak Extendeddek birçok kez 0 occurrences were found.(kullanım \r\n\r\nve \r\ndosya formatına bağlı olarak). Bir satırda çok fazla boş satır varsa , arama dizisinde kullanımı \n\n\n\n\n\n\nveya daha da fazlası \n: s.

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.