Suppression de lignes en double dans Notepad ++

596

Est-il possible de supprimer les lignes dupliquées dans Notepad ++, ne laissant qu'une seule occurrence d'une ligne?

UGEEN
la source

Réponses:

760

Notepad ++ peut le faire, à condition que vous souhaitiez trier par ligne et supprimer les lignes en double en même temps.

Vous aurez besoin du plugin TextFX. Cela était inclus dans les anciennes versions de Notepad ++, mais si vous avez une version plus récente, vous pouvez l'ajouter à partir du menu en accédant à Plugins -> Plugin Manager -> Show Plugin Manager -> Available tab -> TextFX -> Install. Dans certains cas, il peut également être appelé TextFX Characters, mais c'est la même chose

Les cases à cocher et les boutons nécessaires apparaissent maintenant dans le menu sous: TextFX -> TextFX Tools.

Assurez-vous que "trier les sorties uniquement uniques ..." est coché. Ensuite, sélectionnez un bloc de texte ( Ctrl+ Apour sélectionner tout le document). Enfin, cliquez sur "Trier les lignes sensibles à la casse" ou "Trier les lignes sensibles à la casse"

disposition des menus en n ++

Colin Pickard
la source
32
Plugin incroyablement puissant, malgré son "âge". J'espère qu'ils ne supprimeront JAMAIS celui-là de l'offre de plugin NPP standard. Le gars qui a pensé à toutes les fonctionnalités de ce plug-in était une sorte de "visionnaire".
GeertVc
7
Plus puissant qu'excel.
Vasu
6
Qu'en est-il de la version Notepad ++ x64? Le plugin TextFX x64-version n'existe pas
Geograph
15
TextFx n'est pas dans la version 64 bits.
Rhyous
4
@Geograph Et il n'y aura pas de plugin 64 bits de TextFx voir cette note . Par conséquent, il serait bon de savoir s'il existe un autre plugin permettant de supprimer le tri et les doublons.
Robert
642

Depuis Notepad ++ Version 6, vous pouvez utiliser cette expression régulière dans la boîte de dialogue de recherche et remplacement:

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

et remplacer par rien . Cela laisse de toutes les lignes en double la dernière occurrence du fichier.

Aucun tri n'est nécessaire pour cela et les lignes en double peuvent être n'importe où dans le fichier!

Vous devez vérifier les options "Expression régulière" et ". Matches newline":

Boîte de dialogue Bloc-notes ++ Remplacer

  • ^ correspond au début de la ligne.

  • (.*?)correspond à tous les caractères 0 ou plusieurs fois, mais aussi peu que possible (il correspond exactement à la ligne, cela est nécessaire en raison de l'option ". correspond à la nouvelle ligne"). La ligne correspondante est stockée, en raison des crochets autour et accessible à l'aide\1

  • $ correspond à la fin de la ligne.

  • \s+?^ cette partie correspond à tous les caractères d'espacement (sauts de ligne!) jusqu'au début de la ligne suivante ==> Cela supprime les sauts de ligne après la ligne correspondante, de sorte qu'aucune ligne vide n'est là après le remplacement.

  • (?=.*^\1$)il s'agit d'une affirmation d'anticipation positive. C'est la partie importante de cette expression régulière, une ligne n'est mise en correspondance (et supprimée) que lorsqu'il y a exactement la même ligne qui suit ailleurs dans le fichier.

stema
la source
10
oh, celui-ci est génial, il supprime même les lignes vides, je le macro en ce moment même :)
Aprillion
66
Dans certains cas, il supprime simplement TOUTES les lignes d'un fichier.
SerG
3
Existe-t-il un moyen de supprimer la DERNIÈRE occurrence? Cela correspond à tout sauf le dernier ...
Cullub
28
Dans mon cas où cette solution a supprimé toutes les lignes, décocher la case a . matches newlinefait l'affaire.
Kuitsi
3
@SerG Dans certains cas, cela n'a pas fonctionné pour moi aussi, mais quand j'ai supprimé "matches newline" cela a fonctionné :)
Davidenko
95

Si les lignes se suivent immédiatement, vous pouvez utiliser un remplacement d'expression régulière:

Modèle de recherche: ^(.*\r?\n)(\1)+

Remplacer par: \1

Grant Peters
la source
1
Peut-être que d'autres ont eu de la chance avec cela, mais pour moi ^ (. * \ N) \ 1 se traduit par "Impossible de trouver le texte"
b1nary.atr0phy
4
@ b1naryatr0phy assurez-vous que le "Mode de recherche" est réglé sur "Expression régulière", j'ai également mis à jour le modèle afin qu'il puisse gérer les fins de ligne de style Windows
Grant Peters
3
notepad ++ a un moteur regex léger, il ne permet pas les fonctions avancées, pas même le "? ou \ r \ n" car il ne fonctionne que sur une seule ligne et vous utilisez $ pour les caractères \ r \ n
Stefan Rogin
3
cela élimine un par un. Vous devez le répéter plusieurs fois. Je me demande pourquoi \ n + -> \ n ne fonctionne pas (pensait qu'il signale de nombreux remplacements)
Val
2
@Val, si vous faites de la partie de référence arrière du match un groupe avec 1 ou plusieurs correspondances requises, le modèle correspondra à N lignes dupliquées contiguës à la fois:^(.*\r?\n)(\1)+
Kenigmatic
37

Bloc-notes ++

-> Remplacer la fenêtre

Assurez-vous qu'en mode Recherche, vous avez sélectionné le bouton radio Expression régulière

Trouver quoi:

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

Remplacer par:

1 $

Avant:

et on y pense

et on y pense

une seule ligne

est-ce possible de

est-ce possible de

Après:

et on y pense

une seule ligne

est-ce possible de

myrtille0xff
la source
2
N'est-il pas nécessaire de trier le fichier pour que cela fonctionne?
Peter Mortensen
c'est génial
Remo Liechtenstein le
30

Si vous ne vous souciez pas de l'ordre des lignes (ce que je ne pense pas que vous fassiez), alors vous pouvez utiliser une boîte Linux / FreeBSD / Mac OS X / Cygwin et faire:

$ cat yourfile | sort | uniq > yourfile_nodups

Ensuite, ouvrez à nouveau le fichier dans Notepad ++.

Pablo Santa Cruz
la source
3
Ne fonctionne pas sur 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 est un utilitaire Unix standard, c'est pourquoi cette réponse spécifie qu'il fonctionne sur linux, FreeBSD et MacOSX. La réponse suggère également Cygwyn: Ceci est un programme Windows qui vous donne un shell de style Unix, et avec lui, cat. Pour faire court (trop tard!): Win 7 a besoin de Cygwin pour ce faire.
Travis Clark
11
Dans les fenêtres, vous avez PowerShell:cat yourfile | sort -Unique
Elazar
9
Ce sont de bons exemples de "l'utilisation gratuite du chat". Oubliez l'utilitaire cat et utilisez simplement la redirection de fichiers: sort <votrefichier | uniq> yourfile_nodups
scott8035
1
@ scott8035, je suis d'accord que cat n'est d'aucune utilité pour exécuter cette commande, mais je trouve qu'il est souvent utile de commencer avec cat lors de la détermination d'une longue séquence de commandes non évidentes, comme cat file | sed ... | sed ... | sed ... et ainsi de suite. Je dirais donc qu'il pourrait y avoir des raisons d'utiliser le chat. Bien sûr, le chat peut être retiré à la fin, mais certains sont trop paresseux pour cela.
FORTRAN
17

Les dernières versions de Notepad ++ n'incluent apparemment pas du tout le plugin TextFX. Afin d'utiliser le plugin pour trier / éliminer les doublons, le plugin doit être soit téléchargé et installé (plus impliqué) soit ajouté à l'aide du gestionnaire de plugins.

A) Un moyen simple (comme décrit ici ).

Plugins -> Plugin Manager -> Afficher Plugin Manager -> Onglet Disponible -> Caractères TextFX -> Installer

B) De manière plus impliquée, si une autre version est nécessaire ou si la méthode simple ne fonctionne pas.

  1. Téléchargez le plugin depuis SourceForge:

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

  2. Ouvrez le fichier zip et extrayez NppTextFX.dll

  3. Placez NppTextFX.dll dans le répertoire des plug-ins Notepad ++, tel que:
    C: \ Program Files \ Notepad ++ \ plugins

  4. Démarrez Notepad ++ et TextFX sera l'un des éléments de menu de fichier (comme vu dans la réponse n ° 1 ci-dessus par Colin Pickard)

Après avoir installé le plugin TextFX, suivez les instructions de la réponse n ° 1 pour trier et supprimer les doublons.

Envisagez également de configurer un raccourci clavier à l'aide de Paramètres> Mappeur Shorcut si vous utilisez fréquemment cette commande ou si vous souhaitez répliquer un raccourci clavier, tel que F9 dans TextPad pour le tri.

vers l'est
la source
Dans notepad ++ 7.6, le plug-in doit être ajouté à C:\Users\<your_user>\AppData\Local\Notepad++\plugins\NppTextFX. En dehors de cela, cela fonctionne toujours bien.
P_W999
14

Dans la version 7.8, vous pouvez accomplir cela sans aucun plugin - Édition -> Opérations de ligne -> Supprimer les lignes en double consécutives. Vous devrez trier le fichier pour placer les lignes en double dans un ordre consécutif avant que cela fonctionne, mais cela fonctionne comme un charme.

Les options de tri sont disponibles sous Edition -> Opérations de ligne -> Trier par ...

dr.nixon
la source
7

Vous aurez peut-être besoin d'un plugin pour ce faire. Vous pouvez essayer la ligne de commande cc.ddl(supprimer les lignes en double) de ConyEdit . Il s'agit d'un plugin multi-éditeur pour les éditeurs de texte, y compris Notepad ++.

Avec ConyEdit exécuté en arrière-plan, suivez les étapes ci-dessous:

  1. entrez la ligne de commande cc.ddlà la fin du texte.
  2. copiez le texte et la ligne de commande.
  3. coller, alors vous verrez ce que vous voulez.

Exemple
entrez la description de l'image ici

Donald
la source
5

Recherchez l'expression régulière: \b(\w+)\b([\w\W]*)\b\1\b

Remplacez-le par: $1$2

Appuyez sur le bouton Remplacer jusqu'à ce qu'il n'y ait plus de correspondance pour l'expression régulière dans votre fichier.

Hesham Eraqi
la source
Créé un fichier de test pour essayer cela, mais l'expression régulière n'a pas fonctionné de manière fiable pour faire le travail.
RockPaperLizard
Pourriez-vous s'il vous plaît fournir un exemple qui échoue afin que je puisse améliorer ma réponse?
Hesham Eraqi
4

Aucun n'a fonctionné pour moi.

Une solution est:

Remplacer

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

avec

\1
Manohar Reddy Poreddy
la source
Créé un fichier de test pour essayer cela, mais l'expression régulière n'a pas fonctionné de manière fiable pour faire le travail.
RockPaperLizard
Pour toutes mes données, cela a bien fonctionné. J'ai oublié quelle était ma solution. Ajoutez plus de détails là où il a échoué afin que d'autres personnes puissent améliorer cette expression régulière.
Manohar Reddy Poreddy
J'ai créé un fichier pour que chaque ligne ait un entier entre 0 et 999, dans un ordre aléatoire, parfois avec des doublons. Il n'a pas supprimé la plupart des doublons et n'a supprimé aucun des doublons qui n'étaient pas séquentiels.
RockPaperLizard
1
Veuillez fournir 2 exemples pour ceux qui travaillent et pour ceux qui ne travaillent pas. Cela aidera quelqu'un.
Manohar Reddy Poreddy
1
pourquoi ^(.*)\s+(\r?\n\1\s+)+$et non ^(.*)\s*(\r?\n\1\s*)+$?
Mark Ch
2

Le gestionnaire de plugins est actuellement indisponible (ne vient pas avec la distribution) pour Notepad ++. Vous devez l'installer manuellement ( https://github.com/bruderstein/nppPluginManager/releases ) et même si vous le faites, de nombreux plugins ne sont plus disponibles (pas de TextFX).

Il existe peut-être un autre plugin qui contient les fonctionnalités requises. En dehors de cela, la seule façon de le faire dans Notepad ++ est d'utiliser une expression régulière spéciale pour la correspondance, puis le remplacement ( Ctrl+ F→ onglet Remplacer ).

Bien qu'il existe de nombreuses fonctionnalités disponibles via l' élément de menu Edition (découpage, suppression de lignes vides, tri, conversion EOL), aucune opération "unique" n'est disponible.

Si vous avez Windows 10, vous pouvez activer Bash (tapez simplement Ubuntu dans le Microsoft Store et suivez les instructions de la description pour l'installer) et utilisez cat your_file.txt | sort | uniq > your_file_edited.txt. Bien sûr, vous devez être dans le même répertoire de travail que "votre_fichier.txt" ou vous y référer via son chemin.

Patronaut
la source