432 votes

Regex : Supprimer les lignes contenant

J'ai un long document de commandes. En utilisant notepad++ ou regex, je veux supprimer toutes les lignes contenant "help", y compris keyboard_help, etc.

Comment cela peut-il être fait ?

1077voto

stema Points 36113

Cela est également possible avec Notepad++

  • Accéder au menu de recherche Ctrl + F et là à la "Mark" onglet. Vérifiez "Bookmark line" (s'il n'y a pas de "Mark" mise à jour de l'onglet vers la version actuelle).

  • Ensuite, il suffit d'entrer votre terme de recherche et cliquez sur "Mark All"

    ==> Toutes les lignes contenant le terme recherché sont mises en signet.

  • Allez maintenant dans le menu "Search -> Bookmark -> Remove Bookmarked lines"

  • C'est fait.

41 votes

Ouais ! Il a aussi 'Remove Unmarked Lines', qui est comme grep, exactement ce dont j'avais besoin !

0 votes

Comment supprimer/copier, par exemple, trois lignes consécutives après une ligne marquée d'un signet pour tous les signets ?

0 votes

Cette approche fonctionne, mais si le fichier est gros (100MB) et que de nombreux éléments sont marqués d'un signet, il devient très lent de les marquer et surtout de "copier les éléments marqués d'un signet". Grep est beaucoup plus rapide(mieux :)

216voto

OozeMeister Points 932

Une autre façon de procéder dans Notepad++ consiste à utiliser la boîte de dialogue Rechercher/Remplacer et les expressions rationnelles :

Ctrl + h pour faire apparaître la boîte de dialogue de recherche et de remplacement.

Dans le Find what: inclure votre regex : .*help.*\r?\n (où le \r est facultatif si vous exécutez N++ dans Wine).

Laissez le Replace with: la zone de texte est vide.

Assurez-vous que la case d'option Expression régulière dans le champ Search Mode est sélectionnée. Cliquez ensuite sur Replace All et voilà ! Toutes les lignes contenant votre terme de recherche help ont été supprimés.

How-To Line Replace in N++

18 votes

meilleure réponse que l'utilisation de l'onglet marque, puisque cela peut être fait pour "Rechercher dans les fichiers".

2 votes

Assurez-vous d'échapper aux caractères spéciaux comme les parenthèses avec une barre oblique inversée.

5 votes

assurez-vous de décocher la case ". correspond à une nouvelle ligne".

19voto

sidyll Points 20176

Tâche facile avec grep :

grep -v help filename

Ajouter > newFileName pour rediriger la sortie vers un nouveau fichier.


Mise à jour

Pour le préciser, le comportement normal sera d'imprimer les lignes à l'écran. Pour les envoyer dans un fichier, la fonction > peut être utilisé. Ainsi, dans cette commande :

grep -v help filename > newFileName
  1. grep appelle le grep le programme, évidemment
  2. -v est un drapeau pour inverser la sortie. Par défaut, grep imprime les lignes qui correspondent au modèle donné. Avec ce drapeau, il imprimera les lignes qui Ne le fais pas. correspondent au modèle.
  3. help est le motif à faire correspondre
  4. filename est le nom du fichier d'entrée
  5. > redirige la sortie vers l'élément suivant
  6. newFileName le nouveau fichier où la sortie sera enregistrée.

Comme vous l'avez peut-être remarqué, vous ne supprimerez pas de choses dans votre dossier. grep le lira et un autre fichier sera enregistré, modifié en conséquence.

0 votes

@Kevin Duke : Hélas ! Cela signifie probablement que vous n'avez pas grep installé. Quoi qu'il en soit, je vous recommande d'installer GNU grep, il fonctionnera certainement sous Windows, et c'est un outil vraiment utile.

0 votes

@sidyll il savait ce qu'était grep et il a fait un tas de sorties, c'est peut-être parce que je n'ai pas spécifié de fichier de sortie.

2 votes

@Kevin Duke : comme je l'ai dit plus tôt dans la réponse, la sortie peut être redirigée. Le comportement standard est l'impression sur l'écran. Pour rediriger, vous utilisez un pipe ( > dans ce cas), ce qui donne une commande finale de grep -v help filename > outputFileName

14voto

Tikhon Jelvis Points 30789

Vous pouvez le faire en utilisant sed : sed '/help/ d' < inputFile > outputFile

4 votes

@CengizFrostclaw : En ligne de commande sous Linux/Mac/Quoi que ce soit. Si vous êtes sous Windows, vous devez installer quelque chose comme CygWin et l'utiliser.

0 votes

Merci @TikhonJelvis ! Et une dernière question, pouvons-nous faire sed 'help/' pour supprimer toutes les lignes démarrage (ne contenant pas) avec de l'aide ?

3 votes

@CengizFrostclaw : Je pense que sed '/^help/ d' devrait fonctionner. Le site ^ représente le début de la ligne.

14voto

Recherche avec une expression régulière :

^.*(help).*$

2 votes

Et pour la partie suppression ?

1 votes

@PeterMortensen Trouver \n\n remplacer par `` (rien)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X