Regex: Supprimer les lignes contenant "help", etc.

372

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?

citron
la source

Réponses:

947

C'est également possible avec Notepad ++:

  • Allez dans le menu de recherche, Ctrl+ F, et ouvrez l' onglet Mark .
  • Vérifiez la ligne de signet (s'il n'y a pas de mise à jour de l'onglet Mark dans la version actuelle).

  • Entrez votre terme de recherche et cliquez sur Marquer tout

    • Toutes les lignes contenant le terme de recherche sont mises en signet.
  • Maintenant, allez dans le menu RechercherSignetSupprimer les lignes marquées

  • Terminé.

stema
la source
36
Ouais! Il a également «Supprimer les lignes non marquées», ce qui est comme grep, exactement ce dont j'avais besoin!
Chloé
6
Merci, c'est une astuce intéressante. Je préfère le faire en quelques clics simples plutôt que de lancer une console Unix (en ignorant que je suis principalement sur Windows), cddans le chemin, et de taper une commande complexe (s'inquiéter de la syntaxe et du vissage en permanence puis se rendre compte il n'y a pas de sauvegarde). [ Ne vous méprenez pas, j'utilise les commandes de la console tout le temps pour d'autres choses, mais pour quelque chose comme ça, c'est juste une surpuissance.]
ADTC
2
Je viens de gagner beaucoup de temps :-)
Brlja
3
la vérification BOOKMARK LINEest importante ici sinon cela ne fonctionnera pas!.
HaSeeB MiR
1
@AndrewSchultz, désolé, mais non.
stema
187

Une autre façon de le faire dans Notepad ++ est tout dans la boîte de dialogue Rechercher / Remplacer et avec l'expression régulière:

  • Ctrl+ hpour afficher la boîte de dialogue Rechercher remplacer.

  • Dans la zone de Find what:texte, incluez votre expression régulière: .*help.*\r?\n(où le \rest facultatif dans le cas où le fichier n'a pas de fin de ligne Windows).

  • Laissez la zone de Replace with:texte vide.

  • Assurez-vous que le bouton radio Expression régulière dans la zone Mode de recherche est sélectionné. Ensuite, cliquez Replace Allet le tour est joué! Toutes les lignes contenant votre terme de recherche helpont été supprimées.

Comment remplacer une ligne en N ++

OozeMeister
la source
17
meilleure réponse que d'utiliser l'onglet de marque, car cela peut être fait pour "Rechercher dans les fichiers"
Alex
2
Assurez-vous d'échapper les caractères spéciaux comme les parenthèses avec une barre oblique inverse.
Noumenon
4
assurez-vous de décocher la case ". matches
newline
1
Meilleure réponse grâce à une performance plus élevée. Avec des fichiers de plus de 1 million de lignes, la méthode des signets est étirée à son maximum, également sur les machines modernes.
Roland Ettinger
18

Tâche facile avec grep:

grep -v help filename

Ajoutez > newFileNamepour rediriger la sortie vers un nouveau fichier.


Mise à jour

Pour le clarifier, le comportement normal sera d'imprimer les lignes à l'écran. Pour le diriger vers un fichier, le >peut être utilisé. Ainsi, dans cette commande:

grep -v help filename > newFileName
  1. grepappelle le grepprogramme, évidemment
  2. -vest un drapeau pour inverser la sortie. Par défaut, grepimprime les lignes qui correspondent au motif donné. Avec ce drapeau, il imprimera les lignes qui ne correspondent pas au motif.
  3. help est le modèle qui correspond
  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 les éléments de votre fichier. greple lira et un autre fichier sera enregistré, modifié en conséquence.

Sidylle
la source
@Kevin Duke: Hélas! Cela signifie probablement que vous n'avez pas grepinstallé. Quoi qu'il en soit, je vous recommande d'installer GNU grep, cela fonctionnera certainement sous Windows, et c'est un outil vraiment utile.
Sidyll
@sidyll il savait ce qu'était grep et il a fait un tas de sortie, cela aurait pu être parce que je n'ai pas spécifié de fichier de sortie
citron
2
@Kevin Duke: comme je l'ai dit plus tôt dans la réponse, la sortie peut être redirigée. Le comportement standard est imprimé à l'écran. Pour rediriger, vous utilisez un pipe ( >dans ce cas), donnant une commande finale degrep -v help filename > outputFileName
sidyll
Merci, je vais certainement essayer ça!
citron
grep> sed n'importe quel jour de la semaine pour TROUVER des séquences de personnages
kwikness
13

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

Tikhon Jelvis
la source
4
@CengizFrostclaw: Sur la ligne de commande sur Linux / Mac / Whats. Si vous êtes sous Windows, vous devez installer quelque chose comme CygWin et l'utiliser.
Tikhon Jelvis
Merci @TikhonJelvis! Et une dernière question, pouvons-nous faire sed 'help /' pour supprimer toutes les lignes commençant (ne contenant pas) avec de l'aide?
jeff
3
@CengizFrostclaw: Je pense que cela sed '/^help/ d'devrait fonctionner. Le ^représente le début de la ligne.
Tikhon Jelvis
@jeff PowerShell a sedetgrep
Ooker
cygwin peut ne pas fonctionner sur les fenêtres avec des fichiers utf-16. Les utilitaires Cygwin utilisent UFT-8 par défaut. Très peu d'entre eux prennent en charge l'UTF-16. Utilisez babun babun.github.io . Il agit comme un wrapper autour de cygwin, mais fournit beaucoup de choses hors de la boîte.
Sahil Singh
9

Recherche avec une expression régulière:

^.*(help).*$
Rob Rob
la source
2
Qu'en est-il de la partie suppression?
Peter Mortensen
1
@PeterMortensen Find \n\n, remplacez par `` (rien)
Leo
6

Si vous êtes sous Windows , essayez findstr. Les outils tiers ne sont pas nécessaires:

findstr /V /L "searchstring" inputfile.txt > outputfile.txt

Il supporte aussi les regex! Lisez simplement l'aide de l'outil findstr /?.

PS Si vous voulez travailler avec de grands, grands fichiers (comme 400 Mo fichiers journaux) un éditeur de texte n'est pas très efficace mémoire, donc, comme quelqu'un l'a déjà souligné, les outils de ligne de commande sont la voie à suivre. Mais il n'y a pas de grep sur Windows, alors ...

Je viens de l'exécuter sur un fichier journal de 1 Go, et cela a littéralement pris 3 secondes.

Alex
la source