Menghapus baris duplikat di Notepad ++

595

Apakah mungkin untuk menghapus baris duplikat di Notepad ++, hanya menyisakan satu kemunculan baris?

UGEEN
sumber

Jawaban:

760

Notepad ++ dapat melakukan ini, asalkan Anda ingin menyortir per baris, dan menghapus duplikat baris secara bersamaan.

Anda akan membutuhkan plugin TextFX. Ini dulu termasuk dalam versi Notepad ++ yang lebih lama, tetapi jika Anda memiliki versi yang lebih baru, Anda dapat menambahkannya dari menu dengan masuk ke Plugins -> Plugin Manager -> Show Plugin Manager -> Available tab -> TextFX -> Install. Dalam beberapa kasus mungkin juga disebutTextFX Characters , tetapi ini adalah hal yang sama

Kotak centang dan tombol diperlukan sekarang akan muncul di menu di bawah: TextFX -> TextFX Tools.

Pastikan "urutkan keluaran hanya unik ..." dicentang. Selanjutnya, pilih satu blok teks ( Ctrl+ Auntuk memilih seluruh dokumen). Terakhir, klik "sort case case sensitive" atau "sort lines case peka"

tata letak menu di n ++

Colin Pickard
sumber
32
Plugin yang sangat kuat, meskipun "usia". Berharap mereka tidak akan pernah menghapus yang dari tawaran plugin NPP standar. Pria yang memikirkan semua fitur dalam plug-in ini, agak "visioner".
GeertVc
7
Lebih kuat dari unggul.
Vasu
6
Bagaimana dengan Notepad ++ versi x64? Plugin TextFX x64-versi tidak ada
Geografi
15
TextFx tidak dalam versi 64 bit.
Rhyous
4
@Geograph Dan tidak akan ada plugin 64 bit dari TextFx lihat catatan ini . Oleh karena itu akan baik untuk mengetahui apakah ada plugin alternatif yang menyediakan pengurutan dan penghapusan duplikat.
Robert
641

Karena Notepad ++ Versi 6 Anda dapat menggunakan regex ini dalam pencarian dan ganti dialog:

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

dan gantikan dengan apa-apa . Ini meninggalkan dari semua baris duplikat kejadian terakhir dalam file.

Tidak diperlukan penyortiran untuk itu dan baris duplikat dapat berada di mana saja dalam file!

Anda perlu memeriksa opsi "Ekspresi reguler" dan ". Cocok dengan baris baru":

Notepad ++ Ganti dialog

  • ^ cocok dengan awal baris.

  • (.*?)cocok dengan karakter apa saja 0 kali atau lebih, tetapi sesedikit mungkin (Cocok dengan baris, ini diperlukan karena opsi ". cocok dengan baris baru"). Baris yang cocok disimpan, karena tanda kurung di sekitar dan dapat diakses menggunakan\1

  • $ cocok dengan akhir baris.

  • \s+?^ bagian ini cocok dengan semua karakter spasi putih (baris baru!) sampai awal baris berikutnya ==> Ini menghapus baris baru setelah baris yang cocok, sehingga tidak ada baris kosong di sana setelah penggantian.

  • (?=.*^\1$)ini adalah pernyataan lookahead positif. Ini adalah bagian penting dalam regex ini, satu baris hanya cocok (dan dihapus), ketika ada baris yang sama persis mengikuti tempat lain di file.

stema
sumber
10
oh, yang ini brilian, bahkan menghapus baris kosong, saya membuat makro saat ini :)
Aprillion
66
Itu hanya menghapus SEMUA baris dalam file dalam beberapa kasus.
SerG
3
Apakah ada cara untuk menghapus kejadian TERAKHIR? Ini cocok dengan yang terakhir ...
Cullub
28
Dalam kasus saya di mana solusi ini menghapus semua baris, hapus centang . matches newlinelakukan triknya.
Kuitsi
3
@ SGG Dalam beberapa kasus itu tidak bekerja untuk saya juga, tetapi ketika saya menghapus "cocok dengan baris baru" itu :)
Davidenko
95

Jika baris segera setelah satu sama lain maka Anda dapat menggunakan ganti regex:

Pola pencarian: ^(.*\r?\n)(\1)+

Ubah dengan: \1

Berikan Peters
sumber
1
Mungkin orang lain beruntung dengan ini, tetapi bagi saya ^ (. * \ N) \ 1 menghasilkan "Tidak dapat menemukan teks"
b1nary.atr0phy
4
@ b1naryatr0phy pastikan Anda memiliki "Mode Pencarian" yang diatur ke "Ekspresi reguler", saya juga memperbarui pola sehingga dapat menangani akhiran garis gaya windows
Grant Peters
3
notepad ++ memiliki mesin regex ringan, ia tidak dapat mengizinkan functios canggih, bahkan "? or \ r \ n" karena hanya berfungsi pada satu baris dan Anda menggunakan $ untuk karakter \ r \ n
Stefan Rogin
3
ini menghilangkan satu per satu. Anda harus mengulanginya berkali-kali. Saya bertanya-tanya mengapa \ n + -> \ n tidak bekerja (pikir itu melaporkan banyak penggantian)
Val
2
@ Val, jika Anda membuat bagian referensi belakang dari pertandingan dengan 1 atau lebih pertandingan yang cocok, polanya akan cocok dengan N garis rangkap yang bersebelahan pada satu waktu:^(.*\r?\n)(\1)+
Kenigmatic
37

Notepad ++

-> Ganti jendela

Pastikan bahwa dalam mode Pencarian Anda telah memilih tombol radio Ekspresi reguler

Menemukan apa:

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

Ubah dengan:

$ 1

Sebelum:

dan kami pikir di sana

dan kami pikir di sana

garis tunggal

Apakah mungkin

Apakah mungkin

Setelah:

dan kami pikir di sana

garis tunggal

Apakah mungkin

blueberry0xff
sumber
2
Bukankah file harus disortir agar ini berfungsi?
Peter Mortensen
ini luar biasa
Remo Liechti
30

Jika Anda tidak peduli dengan urutan baris (yang menurut saya tidak Anda lakukan), maka Anda dapat menggunakan kotak Linux / FreeBSD / Mac OS X / Cygwin dan lakukan:

$ cat yourfile | sort | uniq > yourfile_nodups

Kemudian buka file lagi di Notepad ++.

Pablo Santa Cruz
sumber
3
Tidak berfungsi di Windows 7.'cat' is not recognized as an internal or external command, operable program or batch file.
Iain Samuel McLean Elder
2
@Iain Elder: cat adalah utilitas Unix standar, itulah sebabnya jawaban ini menentukan bahwa ia berfungsi di linux, FreeBSD, dan MacOSX. Jawabannya juga menyarankan Cygwyn: Ini adalah program windows yang memberi Anda shell gaya unix, dan dengannya, cat. Singkat cerita (terlambat!): Menang 7 membutuhkan Cygwin untuk melakukan ini.
Travis Clark
11
Di windows Anda memiliki PowerShell:cat yourfile | sort -Unique
Elazar
9
Ini adalah contoh yang baik dari "penggunaan kucing secara serampangan". Lupakan utilitas kucing dan gunakan saja pengalihan file dengan demikian: sortir < file Anda | uniq> yourfile_nodups
scott8035
1
@ scott8035, saya setuju bahwa cat tidak berguna untuk menjalankan perintah itu, tetapi saya merasa sering membantu untuk memulai dengan cat ketika mencari urutan panjang dari perintah yang tidak jelas, seperti file cat | sed ... | sed ... | sed ... dan seterusnya. Jadi saya akan mengatakan bahwa mungkin ada alasan untuk menggunakan kucing. Tentu saja kucing bisa dihilangkan pada akhirnya, tetapi ada juga yang malas untuk itu.
FORTRAN
17

Versi Notepad ++ yang terakhir tampaknya tidak menyertakan plugin TextFX sama sekali. Untuk menggunakan plugin untuk menyortir / menghilangkan duplikat, plugin harus diunduh dan diinstal (lebih terlibat) atau ditambahkan menggunakan manajer plugin.

A) Cara mudah (seperti dijelaskan di sini ).

Plugins -> Plugin Manager -> Show Plugin Manager -> tab Tersedia -> Karakter TextFX -> Instal

B) Cara yang lebih terlibat, jika versi lain diperlukan atau cara mudah tidak berhasil.

  1. Unduh plugin dari SourceForge:

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

  2. Buka file zip dan ekstrak NppTextFX.dll

  3. Tempatkan NppTextFX.dll di direktori plugin Notepad ++, seperti:
    C: \ Program Files \ Notepad ++ \ plugins

  4. Mulai Notepad ++, dan TextFX akan menjadi salah satu item menu file (seperti yang terlihat pada Jawaban # 1 di atas oleh Colin Pickard)

Setelah menginstal plugin TextFX, ikuti instruksi di Jawaban # 1 untuk mengurutkan dan menghapus duplikat.

Juga, pertimbangkan untuk mengatur pintasan keyboard menggunakan Pengaturan> Shorcut mapper jika Anda sering menggunakan perintah ini atau ingin mereplikasi pintasan keyboard, seperti F9 di TextPad untuk pengurutan.

Timur
sumber
Di notepad ++ 7.6, plug-in harus ditambahkan C:\Users\<your_user>\AppData\Local\Notepad++\plugins\NppTextFX. Selain itu ini masih berfungsi dengan baik.
P_W999
14

Dalam versi 7.8, Anda dapat melakukannya tanpa plugin - Edit -> Operasi Lini -> Hapus Garis Duplikat Berturutan. Anda harus mengurutkan file untuk menempatkan baris duplikat dalam urutan berturut-turut sebelum ini berfungsi, tetapi itu berfungsi seperti pesona.

Opsi pengurutan tersedia di Edit -> Operasi Lini -> Sortir Menurut ...

dr.nixon
sumber
7

Anda mungkin memerlukan plugin untuk melakukan ini. Anda dapat mencoba baris perintah cc.ddl(hapus baris duplikat) dari ConyEdit . Ini adalah plugin lintas-editor untuk editor teks, termasuk Notepad ++.

Dengan ConyEdit berjalan di latar belakang, ikuti langkah-langkah di bawah ini:

  1. masukkan baris perintah cc.ddl di akhir teks.
  2. salin teks dan baris perintah.
  3. rekatkan, maka Anda akan melihat apa yang Anda inginkan.

Contoh
masukkan deskripsi gambar di sini

Donald
sumber
5

Cari ekspresi reguler: \b(\w+)\b([\w\W]*)\b\1\b

Ganti dengan: $1$2

Tekan tombol Ganti sampai tidak ada lagi yang cocok untuk ekspresi reguler di file Anda.

Hesham Eraqi
sumber
Membuat file uji untuk mencoba ini, tetapi ekspresi reguler tidak berfungsi andal untuk menyelesaikan pekerjaan.
RockPaperLizard
Maukah Anda memberikan contoh yang gagal sehingga saya dapat meningkatkan jawaban saya?
Hesham Eraqi
4

Tidak ada yang berhasil untuk saya.

Solusinya adalah:

Menggantikan

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

dengan

\1
Manohar Reddy Poreddy
sumber
Membuat file uji untuk mencoba ini, tetapi ekspresi reguler tidak berfungsi andal untuk menyelesaikan pekerjaan.
RockPaperLizard
Untuk semua data saya, itu berfungsi dengan baik. Saya lupa apa solusi saya. Tambahkan lebih detail di mana itu gagal sehingga orang lain dapat meningkatkan regex ini.
Manohar Reddy Poreddy
Saya membuat file sehingga setiap baris memiliki bilangan bulat antara 0-999 di atasnya, dalam urutan acak, terkadang dengan duplikat. Itu tidak menghapus sebagian besar duplikat, dan tidak menghapus duplikat di sana tidak ada berurutan.
RockPaperLizard
1
Harap berikan 2 contoh untuk yang bekerja dan yang tidak bekerja. Itu akan membantu seseorang.
Manohar Reddy Poreddy
1
mengapa ^(.*)\s+(\r?\n\1\s+)+$dan tidak ^(.*)\s*(\r?\n\1\s*)+$?
Mark Ch
2

Pengelola plugin saat ini tidak tersedia (tidak disertai dengan distribusi) untuk Notepad ++. Anda harus menginstalnya secara manual ( https://github.com/bruderstein/nppPluginManager/releases ) dan bahkan jika Anda melakukannya, banyak plugin tidak tersedia lagi (tidak ada plugin TextFX).

Mungkin ada plugin lain yang berisi fungsionalitas yang diperlukan. Selain itu, satu-satunya cara untuk melakukannya di Notepad ++ adalah dengan menggunakan beberapa regex khusus untuk mencocokkan dan kemudian mengganti ( Ctrl+ FGanti tab).

Meskipun ada banyak fungsi yang tersedia melalui Edit item menu (memotong, menghapus baris kosong, menyortir, mengkonversi EOL) tidak ada operasi "unik" yang tersedia.

Jika Anda memiliki Windows 10 maka Anda dapat mengaktifkan Bash (cukup ketik Ubuntu di Microsoft Store dan ikuti instruksi dalam deskripsi untuk menginstalnya) dan gunakan cat your_file.txt | sort | uniq > your_file_edited.txt. Tentu saja Anda harus berada di direktori kerja yang sama dengan "your_file.txt" atau merujuknya melalui jalurnya.

Pelindung
sumber