J'ai proposé plusieurs solutions possibles à votre attention. Veuillez m'excuser si je reviens sur un point que vous connaissez déjà =)
TL;DR
Depuis Notepad++ v7.7.1, Notepad++ dispose d'une fonction appelée Supprimer les lignes consécutives en double qui fait la même chose que les deux autres solutions données ci-dessous (c'est-à-dire qu'elle supprime les lignes consécutives dupliquées).
On peut y accéder avec Opérations de modification des lignes Supprimer les lignes consécutives en double .
Véase Réponse de Bartleby ci-dessous pour un exemple d'expression régulière qui dédupliquera les lignes sans les trier.
Réponse originale
Selon le commentaire de @máté-juhász, la réponse acceptée est la suivante Question StackOverflow fonctionnera avec votre exemple de données.
En résumé :
-
Ouvrir Remplacer la recherche... ( Ctrl + H ) dans Notepad++.
-
Dans le champ "Find what :", entrez ce qui suit expression régulière :
^(.*?)$\s+?^(?=.*^\1$)
-
Laissez le champ "Remplacer par :" vide et assurez-vous de cocher "Expression régulière" dans les options "Mode de recherche".
-
Une fois que vous êtes prêt à supprimer vos lignes, cliquez sur "Remplacer tout".
Notez que la réponse originale semble indiquer que le . matches newline
devrait être cochée, mais certaines personnes dans les commentaires ont apparemment eu plus de chance en la laissant décochée. Pour vos données, je l'ai laissée décochée et cela semble bien fonctionner.
ex. Utilisation d'expressions régulières
Utilisation d'uniq
Si aucune autre option ne répond à vos besoins, vous pouvez utiliser un portage Windows de l'application Unix uniq vous pourriez éventuellement l'intégrer dans votre flux de travail avec Notepad++.
En bref, uniq
remplit la même fonction que l'expression régulière ci-dessus, mais d'une manière potentiellement plus fiable. L'inconvénient est que l'incorporer dans Notepad++ est un peu difficile. Cela dit, si vous souhaitez tenter l'expérience, les étapes de base sont décrites ci-dessous.
Obtenir uniq
Pour commencer, vous avez besoin d'une copie de uniq
pour Windows. Plusieurs options peuvent s'offrir à vous mais, pour plus de simplicité, je vous propose la solution suivante Paquet GnuWin32 CoreUtils qui comprend uniq
. Vous pouvez actuellement télécharger un installateur léger si vous choisissez de ne pas télécharger et combiner vous-même les versions zippées des composants du paquet CoreUtils.
En guise de conseil, pour chaque étape de la solution impliquant l'utilisation de uniq
Je n'utiliserais pas les chemins d'accès avec des espaces. Unix traite souvent les espaces dans les noms de répertoires différemment de Windows, de sorte que les utilitaires portés depuis cet environnement peuvent avoir des problèmes avec eux.
Pour référence, je ne suis pas sûr des limites de taille de fichier (s'il y en a) qui s'appliquent à la version GnuWin32 de uniq
mais je l'utilise souvent pour des fichiers texte contenant au moins plusieurs mégaoctets de données (souvent plusieurs centaines de milliers de lignes) avec facilité.
Utiliser uniq avec Notepad++
Une fois uniq
est installé, placez quelque chose de similaire aux lignes suivantes dans un fichier batch :
C:\path\to\uniq.exe %* > C:\temp\uniq_tmp.txt
notepad++ C:\temp\uniq_tmp.txt
exit()
Enregistrez ce fichier batch dans un répertoire permanent qui vous convient. À titre de référence, j'appellerai ce fichier uniq_npp.bat . Notez que "temp" peut être n'importe quel dossier, mais que "tmp" et "temp" existent déjà souvent sous Windows. De même, "uniq_tmp.txt" peut être le nom que vous souhaitez, tant qu'il est utilisé de manière cohérente.
Après l'enregistrement uniq_npp.bat Nous sommes alors prêts à intégrer ses fonctionnalités dans Notepad++. Pour ce faire, ouvrez le fichier Notepad++ Courir... menu ( F5 ) et saisissez quelque chose de similaire à ce qui suit dans le champ qui apparaît :
cmd /k C:\path\to\uniq_npp.bat "$(FULL_CURRENT_PATH)"
Vous pouvez tester votre commande Notepad++ avant de l'enregistrer en cliquant sur le bouton "Exécuter" le plus à gauche.
ex. Exécuter... Dialogues
Sinon, cliquez sur "Enregistrer..." et donnez un nom approprié à votre commande. Vous pouvez lui donner un raccourci clavier si vous le souhaitez, mais ce n'est pas obligatoire. Cliquez sur "OK" pour conserver les paramètres de votre commande et placez-la dans la section Courir... pour une utilisation ultérieure.
ex. Exécuter le menu déroulant
En supposant que cela vous intéresse, j'ai un très bref aperçu des détails de la façon dont la uniq
dans la section "Notes" à la fin de cette réponse.
Mises en garde
Une chose importante à retenir à propos de ces solutions avec uniq
est qu'il exige absolument un chemin d'accès à un fichier enregistré sur le disque (le document ne peut pas être ouvert uniquement dans Notepad++).
Ce n'est pas un problème avec un fichier existant que vous avez ouvert, mais si vous créez un nouveau fichier ou modifiez un original existant, vous devez Économiser avant d'exécuter votre uniq_npp.bat fichier. Dans le cas contraire, l'opération échouera et les nouvelles données ne seront pas triées.
Comme petit avantage, il est probablement utile de mentionner que cette limitation d'enregistrement ne s'applique pas à l'option d'expression régulière ci-dessus.
備考
Tri
Les solutions proposées (c'est-à-dire l'expression régulière initiale et les uniq
) exigent tous deux que les lignes en double apparaissent directement l'une au-dessus de l'autre pour être supprimées, par exemple :
duplicate line X
duplicate line X
Cela signifie qu'il est important de trier vos données avant d'appliquer l'une de ces opérations. Je suppose que vous le faites déjà étant donné les données de votre exemple, mais cela vaut la peine d'être mentionné.
Macros Notepad++
Comme Notepad++ n'a pas de raccourcis clavier pour ses opérations de tri de lignes intégrées, vous pouvez enregistrer une macro pour faciliter le tri. En particulier, vous pouvez enregistrer une macro Modifier Sélectionner tout ( Ctrl + A ) et choisissez ensuite l'une des opérations Modifier les opérations sur les lignes Trier les lignes de manière lexicographique options.
Pour les uniq
il peut également être utile d'envisager l'enregistrement d'une opération "Enregistrer" en tant qu'étape finale d'une macro de tri. Notez également que les étapes de l'option d'expression régulière (ouverture de la boîte de dialogue Remplacer, saisie de l'expression régulière, etc.) peuvent également être enregistrées dans une macro pratique.
Comment fonctionne la solution uniq
En bref :
-
La ligne "Exécuter..." ouvre une fenêtre de commande ( cmd /k
), appelle uniq_npp.bat et lui donne le chemin d'accès à l'endroit où est stocké le fichier que vous avez sélectionné.
-
En uniq_npp.bat , ce chemin est capturé par l'intermédiaire du %*
transmis à l'option uniq
. Les données dédupliquées de uniq
est ensuite redirigée ( >
) vers "uniq_tmp.txt".
-
Enfin, le fichier batch ouvre ce tet nettoyé dans un nouvel onglet de Notepad++ et la fenêtre de commande est fermée via exit()
.
uniq_npp.bat Améliorations ( ?)
En ce qui concerne le tri, une autre option consiste à ne pas utiliser Notepad++ pour trier les choses. Vous perdez potentiellement un peu de flexibilité dans le processus en ce qui concerne les options de tri, mais vous pouvez simplement trier les éléments en tant qu'étape supplémentaire dans votre fichier batch via l'option Tri des fenêtres commandement. Pour ajouter cette étape, vous pouvez modifier la première ligne de la commande uniq_npp.bat comme suit :
sort %* | C:\path\to\uniq.exe > C:\temp\uniq_tmp.txt
Il s'agit simplement d'acheminer les données triées à partir de sort
a uniq
. Comme vous pouvez le constater, sort
capture désormais initialement le chemin des données, au lieu de uniq
.
Une autre idée est d'utiliser (éventuellement) la fonction %*
dans le cadre d'une opération sur une chaîne de caractères pour obtenir le nom de fichier original et remplacer par exemple "uniq_tmp.txt" par quelque chose comme "nom-de-fichier-original_uniq.txt" pour le rendre plus... unique.
Pièges potentiels
s'ils ne sont pas précédés de 0 (par ex. 01, 02, 011, 021
).
- Bien que le paquetage GnuWin32 CoreUtils soit livré avec un portage de l'application Tri Unix (qui dispose d'options plus robustes que l'utilitaire Windows
sort
), cette implémentation particulière (contrairement à la plupart des utilitaires de GnuWin32) me semble un peu pauvre sous Windows. Cependant, si vous utilisez un portage Windows différent de la version Unix de sort
il se peut que cette question ne s'applique pas et qu'il s'agisse d'une meilleure option dans l'ensemble.