web-dev-qa-db-fra.com

Supprimer toutes les lignes du Bloc-notes ++, à l'exception des lignes contenant le mot dont j'ai besoin?

J'ai un fichier texte et je veux que les lignes continuent avec <Path> et supprimer toutes les autres lignes.

Comment puis-je le faire?

193
alon

Il existe un moyen simple d'y parvenir. Vous devez effectuer 3 étapes.

  1. Allez dans le menu Rechercher> Rechercher ...> Sélectionnez l'onglet "Marquer". Activer les expressions régulières. Recherchez ^<Path> (^ correspond au début de la ligne). N'oubliez pas de cocher "Signet lignes" et appuyez sur "Marquer tout"

    ==> Toutes les lignes que vous souhaitez conserver ont un signet

  2. Aller au menu "Rechercher - Signet - Signet Inverse"

    ==> Toutes les lignes que vous souhaitez supprimer sont marquées d'un signet.

  3. Aller au menu "Rechercher - Signet - Supprimer les lignes signetées"

    ==> Toutes les lignes marquées d'un signet sont supprimées.

280
stema

Cela peut être fait en deux étapes à partir de 6.3. Je pense que cela peut être fait plus tôt que cela car j'avais la version 5.9 lorsque je l'ai essayée pour la première fois.

Utiliser stema's post comme base de cette réponse. Il y a un pas de moins maintenant. Marquez les lignes et supprimez les lignes non marquées. Terminé. Des instructions détaillées suivent.

  1. Menu de recherche "Rechercher". Dans la boîte de dialogue Rechercher, cliquez sur l'onglet "Marque". Activer les expressions régulières. Recherchez ^<Path> (^ correspond au début de la ligne). N'oubliez pas de cocher "Signet lignes" et appuyez sur "Marquer tout"

    ==> Toutes les lignes que vous souhaitez conserver ont maintenant un signet

  2. Menu de recherche -> Signet -> Supprimer les lignes non marquées.

    ==> ToutesNONLes lignes en signet sont supprimées.

64
Recognizer

Nettoyez uniquement la solution regex

Variante en deux temps

  1. regex remplacer

    (?!^.*test.*$)^.+
    

    remplacez test par votre texte demandé

  2. remplacer

    [\r\n]{2,}
    

    avec \r\n

Variante à une étape

Utilisez ^(?!<Path>).*\r\n pour remplacer les correspondances par une chaîne vide. La version généralisée serait ^(?!.*?test).*\r\n. Cela ne supprimera pas la ligne vide à la fin du fichier. Toutes les autres lignes sont supprimées, y compris plusieurs lignes vides consécutives.

Explication:

  1. (?!) est un regard négatif. ^.*test.*$ sélectionne toute la ligne contenant le texte demandé.

  2. [\r\n]{2,} correspond à tout \r\n qui survient plus d'une fois qu'il s'agit de la ligne Windows New. Si vous avez Linux ou un autre système d'exploitation, vous devrez peut-être vous embêter avec cela. la seconde consiste à le remplacer par une ligne de retour.

26
sonar0m

Il me semble que le moyen le plus simple consiste simplement à utiliser la fonction "Tout rechercher dans le document actuel", puis à copier les résultats dans un nouveau fichier ou à les sélectionner tous et à les remplacer dans le fichier actuel.

Cela trouverait toutes les lignes contenant votre texte et les listerait en bas. Faites un clic droit sur le résultat de la recherche et copiez/collez.

5
Gubbins

Aller au menu Rechercher -> Trouver ... -> Activer les expressions régulières. Recherchez "^ Path " (^ correspondant au début de la ligne).

Cliquez sur le bouton "Tout trouver dans le document actuel".

La fenêtre "Find result" apparaîtra avec toutes les lignes du motif. Sélectionnez les copier/coller dans un nouvel onglet dans Notepad ++.

Dans ce nouvel onglet, allez dans: menu Recherche -> Remplacer ... -> Activer les expressions régulières.

Dans le champ "Rechercher:", utilisez le modèle: "Ligne\d +:". Laissez le champ "Remplacer par:" vide.

Cliquez sur le bouton "Remplacer tout".

4
Luis

Si vous voulez réellement faire correspondre <Path> et non un chemin de système de fichiers, vous pouvez essayer ceci à partir d'une ligne de commande en utilisant Perl:

Perl -pe " if ($_ !~ /<Path>/) { s/$_// } " < in.txt > out.txt

Cela fonctionnait avec Strawberry Perl sous Windows, ajustez-le en conséquence si les résultats ne sont pas ceux que vous attendez.

3
Joe Internet

C'est maladroit, mais copiez le tout dans Excel , puis utilisez =IF(LEFT(A1,6)="<Path>",A1,"") et copiez la formule au complet. Ensuite, recopiez-le dans Notepad ++. Ce n'est pas idéal, mais c'est assez facile (si vous avez Excel). Attention: Cela ne fonctionnera pas bien avec les lignes en retrait (Excel décale les colonnes, etc.).

3
soandos

Il n'y a pas de moyen facile de faire ce que vous voulez avec Notepad ++. Vous devrez soit télécharger un programme sur votre ordinateur, soit écrire un script dans VB (je suppose que vous êtes sous Windows).

Vous pouvez faire ce que vous voulez de deux façons avec sed. L'utilitaire sed est un favori sur * nix et peut être trouvé pour Windows parmi les personnalités talentueuses de GnuWin ( http://gnuwin32.sourceforge.net/packages/sed.htm ). Vous souhaitez télécharger ce programme, puis exécuter votre commande à partir de l'invite de commande.

Supprimer toutes les lignes ne contenant pas:
sed -i '/^<PATH>/!d' file

Imprimer toutes les lignes contenant un nouveau fichier:
sed -n '/^<PATH>/p' file > newfile

Je vous suggère d'utiliser imprimer les lignes que vous voulez dans un nouveau fichier. La raison en est que vous n'obtiendrez probablement pas la déclaration regex pour la première fois. L'utilitaire sed utilise la syntaxe de base des expressions régulières (consultez la référence à http://www.regular-expressions.info/reference.html ). Si quelque chose ressemble à un chemin * nix (/ var/www), vous devrez échapper au caractère/pour que votre expression rationnelle fonctionne.

Exemple: sed -n '/^\/var\/www/p' file > newfile
Ceci affichera toutes les lignes commençant par '/ var/www'. Si je classais pour échapper le caractère /, alors la commande aurait jeté une erreur. Vous pouvez échapper à un caractère spécial (tel que /) avec le caractère barre oblique inversée \.

1
Chris Ting

Une meilleure solution avec regex remplace:

(?!^.*SOMETEXT.*$)^.+\r?\n

Et remplacer avec rien

1
LoneDev

Utilisez Rechercher-> Remplacer, entrez une expression régulière telle que ^[^ ].* et remplacez-la par une chaîne vide utilisant Regular expression. La prochaine étape consiste à rechercher les lignes vides recherchant \n\n en remplaçant par \n à l'aide de Extended plusieurs fois jusqu'au 0 occurrences were found. (utilisez \r\n\r\n et \r\n en fonction du format de fichier). Si vous avez beaucoup de lignes vides dans une ligne, il est plus rapide d'utiliser \n\n\n\n\n\n\n ou même davantage \n: s dans la chaîne de recherche.

0
AndersTornkvist