1 votes

Suppression des lignes contenant des chaînes regex en double

Je suis désolé si cela a déjà été demandé auparavant, mais malheureusement, il y a tellement de questions sur ce genre de chose et bien qu'elles soient toutes liées, de nombreuses situations qui s'appliquent à une instance peuvent ne pas s'appliquer à une autre, donc voici mon problème.

J'ai un fichier avec la sortie d'un pdfgrep d'une expression régulière contenant plusieurs lignes de sortie. La façon dont le fichier texte est formaté est la suivante:

/chemin/vers/fichier_1/contenant/chaîne_regexe chaîne_regexe_1
/chemin/vers/fichier_1/contenant/chaîne_regexe chaîne_regexe_1
/chemin/vers/fichier_1/contenant/chaîne_regexe chaîne_regexe_1
/chemin/vers/fichier_2/contenant/chaîne_regexe chaîne_regexe_1
/chemin/vers/fichier_2/contenant/chaîne_regexe chaîne_regexe_2
/chemin/vers/fichier_3/contenant/chaîne_regexe chaîne_regexe_2
/chemin/vers/fichier_3/contenant/chaîne_regexe chaîne_regexe_2
/chemin/vers/fichier_3/contenant/chaîne_regexe chaîne_regexe_3
/chemin/vers/fichier_3/contenant/chaîne_regexe chaîne_regexe_3
/chemin/vers/fichier_3/contenant/chaîne_regexe chaîne_regexe_3
/chemin/vers/fichier_3/contenant/chaîne_regexe chaîne_regexe_3

Alors que pdfgrep a parfaitement isolé les informations que j'essayais de tirer des fichiers, il y a malheureusement un grand nombre de chaînes regex en double. Normalement, supprimer les lignes en double ne poserait pas de problème pour moi, mais le problème que j'ai ici est que, bien que la chaîne regex extraite des fichiers originaux soit un doublon, elle peut provenir d'un fichier complètement différent. Je veux seulement que la regex pour laquelle j'ai fait la recherche pdfgrep initiale apparaisse une seule fois dans la liste. Je veux supprimer toutes les entrées en double de cette chaîne ainsi que du chemin associé. Comment puis-je faire cela?

0voto

Ben Points 163

Pour supprimer les lignes se terminant par des valeurs en double, remplacez

([^\s]+\s(.*\n))([^\s]+\s\2)+

Par

\2

Je pars du principe, sur la base de votre exemple d'entrée, que nous pouvons utiliser le premier espace dans une ligne donnée pour délimiter la frontière entre l'expression régulière devant être vérifiée pour les doublons et le reste de la chaîne. Si cette hypothèse est incorrecte, vous pouvez modifier la partie [^\s]+\s pour être n'importe quelle expression régulière valide qui correspond à la première partie (non dupliquée) de votre chaîne.

Le premier jeu de parenthèses correspond à la première ligne que nous conserverons.

Le deuxième jeu de parenthèses correspond à la chaîne que nous voulons vérifier en tant que valeurs en double.

Dans le troisième ensemble, nous vérifions à nouveau une chaîne suivie d'un espace suivie de la même chaîne en double que nous avons capturée dans le 2ème jeu de parenthèses.

Le + vérifie cela plusieurs fois.

\2 remplace l'ensemble de la correspondance par simplement la chaîne en double.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X