Rimuovere stringhe simili dal testo?


2

sto usando Notepad ++ e sed su Windows.
Ho un file di testo 2000+ righe ma a volte ho queste righe:

http://www.shragle.com/files/9baa908b/Bvdub-The_First_Day-%2528HN031%2529-2012.rar
http://www.shragle.com/files/9baa908b/Bvdu...1%2529-2012.rar
http://rapidshare.com/files/152133956/2005_-_Candlemass.part1.rar
http://rapidshare.com/files/152133956/2005...emass.part1.rar
http://www.filefactory.com/file/a181d18/n/...nimal_2010_.rar
http://rapidshare.com/files/152136400/2005_-_Candlemass.part2.rar
http://rapidshare.com/files/152136400/2005...emass.part2.rar
http://www.shragle.com/files/3e0f3488/Cesa...testHits2CD.rar

Come posso rimuovere queste righe?

http://www.shragle.com/files/9baa908b/Bvdu...1%2529-2012.rar
http://rapidshare.com/files/152133956/2005...emass.part1.rar
http://rapidshare.com/files/152136400/2005...emass.part2.rar

Non voglio rimuovere queste righe:

http://www.shragle.com/files/3e0f3488/Cesa...testHits2CD.rar
http://www.filefactory.com/file/a181d18/n/...nimal_2010_.rar

poiché queste righe sono uniche e valide per me, desidero rimuovere solo righe simili

Righe simili, voglio eliminare la ... riga

http://rapidshare.com/files/152133956/2005_-_Candlemass.part1.rar
http://rapidshare.com/files/152133956/2005...emass.part1.rar

riga univoca perché nel mio file di testo viene presentata una sola volta:

http://www.filefactory.com/file/a181d18/n/...nimal_2010_.rar


Non esiste una soluzione NPP nel possibile duplicato, ma c'è qualche regex che potrebbe funzionare sed. C'è anche una soluzione nativa per Linux (con porte Windows) e una soluzione nativa per Windows più semplice.
Bob,

3
Se si desidera rimuovere solo righe simili anziché duplicati esatti, è possibile descrivere i criteri per la rimozione? Cosa qualifica una riga per la rimozione?
Bob

mmm..se guardi da vicino voglio rimuovere non le linee duplicate, ma un tipo di linee. Voglio eliminare le righe che non sono davvero uniche. shragle.com/files/9baa908b/Bvdu è presente su due righe, quindi la seconda riga continua con ... Voglio eliminare ... righe
user143822

Quanti caratteri all'inizio di due righe devono essere uguali, quindi li consideri simili?
Dennis,

Risposte:


1

Quanto segue eliminerà una riga se i suoi primi 40 caratteri sono identici a quelli di un precedente:

Find what:         ((?<=\n)|^)([^\n]{40})([^\n]*\n)(.*\n)?\2[^\n]*($|\n)
Replace with:      \2\3\4
Search Mode:       Regular expression
. matches newline: checked

Potrebbe essere necessario fare clic Replace Allpiù di una volta.

Come funziona

  • ((?<=\n)|^) controlla se il resto dell'espressione regolare è preceduto da una nuova riga o dall'inizio del file.

  • ([^\n]{40})([^\n]*\n)corrisponde ai primi 40 caratteri di una riga (memorizzata in \2) e al resto di essa (archiviata in \3).

  • (.*\n)?è un numero qualsiasi di righe (memorizzate in \4).

  • \2[^\n]* è una riga che inizia con gli stessi 40 caratteri.

  • ($|\n) controlla se il resto dell'espressione regolare è seguito da una nuova riga o dalla fine del file.

Se si incontra questo modello, c'è una linea simile a \2\3.

Sostituendo tutto con \2\3\4, quella riga simile viene eliminata.


Ma scrivo questo regex ((?<=\n)|^)([^\n]{40})([^\n]*\n)(.*\n)\2[^\n]*($|\n)su Notepad ++ o sed ? Su notepad ++ non funziona
user143822

L'ho scritto per Notepad ++ con il nuovo motore regex. Nell'espressione mancava a ?. Dovrebbe funzionare ora.
Dennis,

grazie !, ora funziona..ma funziona solo se le righe simili sono una sotto l'altra. Un regex è in grado di rilevare questo tipo di stringa in ordine casuale?
user143822

sì, il regex funziona bene, ma come trovo queste linee simili quando queste linee sono in ordine sparso? Come li rilevo? Quale regex devo usare per stringhe simili in ordine casuale?
user143822

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.