Sublime - supprime toutes les lignes contenant une valeur spécifique


116

J'ai un fichier journal de 900 Mo que je peux ouvrir dans SublimeText 3. Ce fichier est rempli de lignes similaires à ce qui suit.

10/08/2014 23:45:31:828,Information,,,,ExportManager: ,No records to send and/or not connected

Comment puis-je filtrer toutes les lignes qui contiennent No records to send and/or not connected


Bien que les solutions ci-dessous fonctionnent, ce type de travail devrait vraiment être effectué avec sed / awk pour les fichiers volumineux.
Bar

Réponses:


229

Vous pouvez effectuer une recherche et remplacement d'expressions régulières:

Cliquez sur Rechercher> Remplacer.

Assurez-vous que le bouton Expression régulière est enfoncé.

Pour le champ Rechercher, entrez:

^.*No records to send and/or not connected.*\n

Laissez le champ Remplacer par vide.

Cliquez sur Remplacer tout


16
Le point / point complet à la fin est important, sans cela, cela ne fonctionnera pas. Vous pouvez également utiliser ceci:^.*No records to send and/or not connected\S.*$
Navigatron

Cette solution est la seule possible si vous travaillez sur un gros fichier. Ma machine est restée bloquée pendant plusieurs minutes alors que je l'ai fait Ctrl+Shift+Kavec 200 000 lignes sélectionnées.
Przemek D

Je vais essayer ceci avec mon fichier de 26 000 000 lignes: ')
YB Cause

64

Pour les personnes qui ne veulent pas écrire une expression régulière - vous pouvez simplement sélectionner la chaîne de recherche, appuyer ctrl+cmd+gou choisir "Recherche rapide tout" dans le menu, ce qui vous permettra de sélectionner chaque chaîne correspondante; à partir de là Home, chaque curseur de sélection se déplacera au début de la ligne, shift+Endsélectionnera toutes les lignes correspondantes et del, delles supprimera toutes.

L'édition de plusieurs curseurs est amusante!


4
Ceci est une astuce plus généralisée très utile. Mon objectif était de supprimer toutes les lignes contenant une chaîne. J'ai fini par en sélectionner une instance puis j'ai utilisé "QuickFind" avec le raccourci Ctrl+Cmd+Gcomme le suggère Leonid pour sélectionner toutes ces chaînes. Après cela, j'ai pu aller directement à "Supprimer la ligne" Ctrl-Shift-Ket chirurgicalement toutes les lignes avec cette chaîne ont été supprimées en un instant. Sublime Text est vraiment le meilleur éditeur de texte que j'ai jamais utilisé.
MiB

Est-ce que ctrl + cmd + g est identique à ctrl + alt + g sous Windows? Je ne pouvais pas faire fonctionner ça
panda noir

@black panda Pour Windows "Recherche rapide de tout" est alt + f3 - Merci Leonid +1
Christopher

Si vous êtes comme moi et que vous n'avez pas de bouton d'accueil, vous pouvez également utiliser CMD + <- (flèche gauche)
Koray Tugay

4
Vous pouvez également utiliser cmd + L pour étendre la sélection à la ligne.
Koray Tugay

53

Je n'ai pas pu faire fonctionner l'expression régulière, j'ai donc utilisé l'approche Alt-F3 à partir de cette réponse:

/superuser/452189/how-can-i-filter-a-file-for-lines-containing-a-string-in-sublime-text-2/598999#598999

  1. Sélectionnez la chaîne d'intérêt
  2. Appuyez sur Alt+ F3pour passer en mode multi-curseurs sur toutes les occurrences ( Ctrl+ CMD+ Gsur Mac OS X)
  3. Hit Ctrl+ L[voir les commentaires] ( Cmd+ Lsur Mac)
  4. Copier-coller la sélection dans un autre tampon
  5. Del

2
Deux choses: (1) Vous pouvez créer un lien vers une réponse individuelle comme celle-ci (2) Vous devez résumer l'autre réponse ici (et la spécialiser pour répondre à cette question le cas échéant).
Compilateur remarquable

4
Vous pouvez remplacer les étapes 3 et 4 par CTRL + L, qui étend les sélections à des lignes entières, y compris le saut de ligne.
Chnossos

2
Pour ceux comme moi maudits par un schéma de touches MAC: Ctrl+Cmd+Gpour le multi-curseur sur toutes les occurrences, Cmd+Lpour développer les lignes et le copier / coller habituel
Cyril Duchon-Doris

27

Voici ce que j'ai trouvé pour les utilisateurs de Windows:

  1. Sélectionnez la chaîne (chaque ligne contenant cette chaîne doit être supprimée).
  2. Appuyez sur ALT + F3.
  3. Appuyez sur Ctrl + L.
  4. Appuyez sur Supprimer.

21

Aucun des codes regex suggérés ci-dessus n'a fonctionné dans mon cas, mais cela a fonctionné:

.*(text in question).*

Il laissera des lignes vides sur votre code, c'est ce que vous voulez? Sinon, ajoutez \nou $à la fin:.*(text in question).*\n
utilisateur

Si les lignes ont une structure semblable à "abc / xyz / quelque chose", pour utiliser l'expression régulière, ajoutez '\'. Par exemple, si nous devons rechercher quelque chose entre abc / et / quelque chose, l'expression sera: abc /\.*.*\/ something
Avik

Fonctionne pour moi, si vous avez besoin de plusieurs correspondances comme je l'ai fait, utilisez |comme .*(a).*|.*(b).*|.*(c).*
suit

0

J'ai rencontré un problème similaire lors de la modification d'un plan du site

Cela a fonctionné pour moi:

  1. Copiez le dernier mot des lignes que vous souhaitez supprimer
  2. Trouver tout
  3. Appuyez sur supprimer pour supprimer toute la ligne

0

Les réponses ci-dessus sont les bonnes façons, mais si vous voulez vous débarrasser des lignes avec ne serait-ce qu'une seule chaîne, faites-le, Rechercher -> Remplacer -> mettre ^.*[a-zA-Z]+.*\ndans la section de recherche et continuer à remplacer par du blanc. Appuyez sur le bouton Remplacer tout cela supprimera toutes les lignes avec même une seule chaîne.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.