Hapus semua baris di Notepad ++ kecuali baris yang mengandung kata yang saya butuhkan?


Jawaban:


292

Ada cara mudah untuk mencapai ini. Anda perlu melakukan 3 langkah.

  1. Buka menu Pencarian> Temukan ...> Pilih Tab "Tandai". Aktifkan ekspresi reguler. Pencarian untuk ^<Path>( ^adalah untuk memulai baris). Jangan lupa untuk memeriksa "Bookmark baris" dan Tekan "Tandai Semua"

    ==> Semua Baris yang Anda ingin dapatkan Bookmark

  2. Pergi ke Menu "Cari - Bookmark - Bookmark Inverse"

    ==> Semua Baris yang ingin Anda hapus di-bookmark.

  3. Pergi ke Menu "Cari - Bookmark - Hapus baris Bookmarked"

    ==> Semua baris yang ditandai dihapus.


47
+1. Bagus, tidak tahu tentang ini. Ada juga opsi untuk "Hapus garis yang tidak ditandai" atau "Potong / salin garis yang ditandai" yang dapat menghemat waktu.
deizel

6
Saya memiliki masalah pada awalnya karena versi (6.2.3) Notepad ++ saya tidak memiliki item menu bernama "Mark Tab". Sebaliknya, Anda harus pergi ke "Cari" -> "Cari ..." -> klik pada tab "Tandai". Dan Anda tidak perlu lagi membalik bookmark. Notepad ++ sekarang memiliki "Hapus Garis Tidak Bertanda". Tapi tip Anda banyak membantu saya! Terima kasih!
aakoch

22
Anda dapat melewati langkah 2, karena (setidaknya sejak v6.4.5) dimungkinkan untuk memilih "Hapus Garis Tidak Bertanda".
Julian

4
Saya menggunakan Notepad ++ begitu lama dan saya tidak pernah tahu apa itu 'Bookmark' sebelumnya. Luar biasa betapa kuatnya alat itu dan betapa sedikit yang saya tahu tentangnya.
Danubian Sailor

Anda jenius. ini hanyalah contoh mengejutkan tentang cara mengenal alat yang Anda gunakan secara nyata.
Marcello Grechi Lins

67

Ini sebenarnya bisa dilakukan dalam dua langkah pada 6.3. Saya pikir itu bisa dilakukan lebih awal dari itu karena saya punya 5,9 ketika saya pertama kali mencobanya.

Menggunakan pos stema sebagai dasar jawaban ini. Ada satu langkah lebih sedikit sekarang. Tandai garis dan hapus garis yang tidak ditandai. Selesai. Ikuti petunjuk terperinci.

  1. Cari menu "Temukan". Dalam dialog Temukan, klik tab "Tandai". Aktifkan ekspresi reguler. Pencarian untuk ^<Path>( ^adalah untuk memulai baris). Jangan lupa untuk memeriksa "Bookmark baris" dan Tekan "Tandai Semua"

    ==> Semua Baris yang ingin Anda pertahankan sekarang memiliki Bookmark

  2. Cari Menu -> Bookmark -> Hapus Garis Tidak Bertanda.

    ==> Semua baris NON Bookmarked dihapus.


3
Ini membutuhkan waktu 10 detik, sedangkan solusi yang lain membutuhkan waktu> 20 detik. Terima kasih!
Hitam

Saya tidak perlu menambahkan ^istilah pencarian saya, atau menggunakan ekspresi reguler. Semoga ini bisa membantu seseorang.
sa_leinad

29

Bersihkan solusi regex saja

Varian dua langkah

  1. ganti regex

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

    ganti tes dengan teks yang Anda minta

  2. menggantikan

    [\r\n]{2,}
    

    dengan \r\n

Varian langkah tunggal

Gunakan ^(?!<Path>).*\r\nuntuk mengganti yang cocok dengan string kosong. Versi umum akan menjadi ^(?!.*?test).*\r\n. Ini tidak akan menghapus baris kosong di akhir file. Semua baris lain dihapus, termasuk beberapa baris kosong berturut-turut.

Penjelasan:

  1. (?!)adalah pandangan negatif. ^.*test.*$ memilih seluruh baris yang berisi teks yang diminta.

  2. [\r\n]{2,}cocok dengan apa pun \r\nyang terjadi lebih dari sekali ini adalah baris Windows Baru. jika Anda memiliki Linux atau sistem operasi lain, Anda mungkin perlu mengacaukannya. yang kedua adalah menggantinya dengan satu baris kembali.


1
Catatan untuk orang-orang: Terkadang regex dengan end of line (EOL) "tidak berfungsi". The \r\nEOL disebutkan dalam pos yang menggunakan Windows dan karena itu mungkin atau mungkin tidak apa yang Anda cari. Seringkali di lingkungan Linux hanya saja \n, atau di lingkungan Mac saja \r, jadi jika Anda menarik file dari salah satu, itu tidak akan menjadi EOL gaya Windows. Namun, jika Anda mengunduh melalui pemicu mode FileZilla dan ASCII, itu dapat mengubahnya kembali ke Windows EOL (seperti \nke \r\n). Jadi jika regex tidak berfungsi, periksa gaya EOL dengan masuk ke "Lihat> Tampilkan Simbol> Tampilkan Akhir Garis". CR = \r. LF = \n.
dhaupin

5

Sepertinya saya bahwa cara termudah adalah dengan hanya menggunakan fitur "Temukan Semua dalam Dokumen Saat Ini" dan kemudian salin hasilnya ke file baru atau pilih semua dan ganti di yang sekarang.

Ini akan menemukan semua baris yang berisi teks Anda dan daftar di bagian bawah. Cukup klik kanan pada hasil pencarian dan salin / tempel.


Anda harus menghapus nomor baris dengan mengganti \tLine [\d]*: . Masih jawaban yang bagus.
Noumenon

Ini tidak akan berfungsi untuk garis yang sangat lebar sehingga Notepad ++ memotongnya di jendela hasil pencarian.
MasterJoe2

4

Buka menu Cari -> Temukan ... -> Aktifkan ekspresi reguler. Cari "^ Path " (^ adalah untuk memulai baris).

Klik tombol "Temukan semua dalam Dokumen Saat Ini".

Jendela "Temukan hasil" akan muncul dengan semua garis pola. Pilih salin / tempel ke tab baru di Notepad ++.

Di tab baru ini, buka: menu Cari -> Ganti ... -> Aktifkan ekspresi reguler.

Di bidang "Temukan apa:", gunakan pola: "Baris \ d +:". Biarkan bidang "Ganti dengan:" kosong.

Klik pada tombol "Ganti Semua".


3

Asalkan Anda benar-benar ingin mencocokkan <Path>dan bukan jalur sistem file, Anda dapat mencoba ini dari baris perintah menggunakan Perl:

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

Ini bekerja dengan Strawberry Perl di Windows, jadi sesuaikan sesuai jika hasilnya tidak seperti yang Anda harapkan.


3

Itu canggung, tapi salin semuanya ke Excel , lalu gunakan =IF(LEFT(A1,6)="<Path>",A1,"")dan salin rumus itu sampai habis. Kemudian salin kembali ke Notepad ++. Ini tidak ideal, tetapi sangat mudah (jika Anda memiliki Excel). Peringatan: Ini tidak akan bekerja dengan baik dengan garis indentasi (Excel akan menggeser kolom, dll.).


Ketika ada sejumlah cara untuk menangani tugas ini secara langsung, mengapa Anda ingin menyalin secara destruktif ke aplikasi lain, memproses di sana, dan mentransfer kembali?
Baldrickk

1

Tidak ada cara mudah untuk melakukan apa yang Anda inginkan dengan Notepad ++. Anda harus mengunduh program ke komputer atau menulis sesuatu di VB (saya berasumsi Anda menggunakan Windows).

Anda dapat melakukan apa yang Anda inginkan salah satu dari dua cara dengan sed. Utilitas sed adalah favorit di * nix dan dapat ditemukan untuk Windows dari orang-orang hebat di GnuWin ( http://gnuwin32.sourceforge.net/packages/sed.htm ). Anda akan mengunduh program ini, dan kemudian menjalankan perintah Anda dari command prompt.

Hapus semua baris yang tidak mengandung:
sed -i '/^<PATH>/!d' file

Cetak semua baris yang berisi file baru:
sed -n '/^<PATH>/p' file > newfile

Saya sarankan Anda menggunakan cetak baris yang Anda inginkan ke file baru. Alasan untuk ini adalah bahwa Anda mungkin tidak akan mendapatkan pernyataan regex untuk pertama kalinya. Utilitas sed menggunakan Sintaks Dasar Regular Expression (lihat referensi di http://www.regular-expressions.info/reference.html ). Jika sesuatu seperti * nix path (/ var / www) maka Anda harus melarikan diri dari / karakter agar regex Anda berfungsi.

Contoh: sed -n '/^\/var\/www/p' file > newfile
Ini akan mencetak semua baris yang dimulai dengan '/ var / www'. Jika saya mengajukan untuk keluar dari / karakter, maka perintah itu akan membuat kesalahan. Anda dapat keluar dari karakter khusus (seperti /) dengan karakter backslash \.


Ini mungkin jawaban yang lama tetapi karena itu benar-benar luar biasa memiliki 2 suara (-1 sekarang dari saya) ingin mengomentari bukan hanya betapa salahnya, tetapi mengulangi dalam operasi perintah TUNGGAL bagaimana saya hanya (lagi) mengambil baris> 100k log file ke 34 baris yang berisi satu kata (atau frasa) dalam hal ini cukup "kesalahan" dalam waktu kurang dari 3 detik dengan hanya menempatkan regex ini di FIND WHAT: ^ (?!. *? error). * \ r \ n dan biarkan REPLACE WITH blank, dan JANGAN pilih ". Match newline" dan klik "REPLACE ALL". Ya saya juga suka sed dan awk tetapi mengatakan NPP tidak bisa melakukan ini hanya salah.
Collin Chaffin

1

Solusi yang lebih baik dengan ganti regex:

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

Dan ganti dengan apa-apa


1
Selamat Datang di Pengguna Super! Mau jelaskan ini untuk mereka yang mungkin tidak tahu apa yang dilakukan setiap bit regex? :)
bertieb

0

Gunakan Cari-> Ganti dan masukkan ekspresi reguler seperti ^[^ ].*dan ganti semua dengan string kosong menggunakan Regular expression. Langkah selanjutnya adalah menemukan baris kosong mencari \n\npenggantian dengan \nmenggunakan Extendedbeberapa kali sampai 0 occurrences were found.(gunakan \r\n\r\ndan \r\ntergantung pada format file). Jika Anda memiliki sangat banyak baris kosong dalam satu baris, lebih cepat untuk menggunakan \n\n\n\n\n\n\natau bahkan lebih banyak \n: dalam string pencarian.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.