Y a-t-il un moyen de faire une recherche inverse?
J'ai un très gros fichier journal où un motif particulier se remplit de quelques douzaines de pages est, je ne sais pas quel texte serait après "alpha beta". Cela pourrait être "gamma delta" ou autre chose. Je voudrais donc sauter toutes les lignes contenant "alpha beta". P> p>
6 Réponses :
Je résolvez généralement cela en utilisant une recherche REGEXP
C-u C-r ^20100414 [^a]
@RYANTHOMPSON Vous entourez le texte avec un boîtier 'KBD' comme: quelque chose kbd>.
Comment cette recherche est-elle excluant les tonnes de lignes que nous souhaitons rechercher?
@Nikanareklawyks Il recherche la première ligne qui commence par '20100414' suivie de quelque chose d'autre qu'un "A". Étant donné que ses données sont tellement structurées, cela trouve essentiellement la première ligne qui n'est pas «20100414 alpha beta» - évidemment, il ignorait «20100414 Apple», donc en fonction de la détaillée que vous souhaitez obtenir vous pouvez personnaliser la chaîne de recherche de manière appropriée.
Deux idées: p>
supprimera toutes les lignes ne correspondant pas à une régexp p> li>
trouvera toutes les lignes de ne pas contenir votre régexp. p> li>
ol> M-x Garder-lignes m-x grep
FWIW FLUSH-LINE CODE> Est-ce que l'inverse de Garder-lignes code> I.e. Il supprime les lignes correspondantes.
En général, vous ne pouvez pas effectuer une recherche inverse, mais pour votre cas particulier, vous pouvez utiliser une fonction simple:
(defun my-skip-lines-matching-regexp (regexp)
"Skip lines matching a regexp."
(interactive "sSkip lines matching regexp: ")
(beginning-of-line)
(while (and (not (eobp)) (looking-at regexp))
(forward-line 1)))
Vous pouvez utiliser Hide-Lines: http://www.emacswiki.org/ emacs / cache-lignes.el p>
ALORS Maintenant, vous pouvez rechercher en utilisant E.G. M-X Hide-Lines de RET Alpha Beta RET code> cachera toutes les lignes contenant "alpha beta". P>
C-S CODE> ... P>
Il est similaire à des lignes de garde et de rinçages, mais cela ne modifie pas le tampon.
Vous pouvez également rechercher en utilisant Vous pouvez également rechercher en utilisant http://www.emacswiki.org/emacs/icles_-_search_commands%2C_Overview < / a> p> grep code>, spécifiant que vous souhaitez les lignes qui font pas em> match. p>
icicle-survoir code>, en utilisant c- ~ kbd> pour supprimer les lignes correspondant à ce que vous tapez. p>
Une méthode heuristique qui s'avère souvent utile, c'est de passer à la fin du fichier, puis de rechercher en arrière pour le texte que vous souhaitez sauter. Le succès de cette méthode dépend évidemment du contenu du fichier et fonctionne mieux lorsque le texte répété en question se produit dans des morceaux singuliers. P>
J'ai découvert cette question à l'aide de Google. Ma requête était "Emacs Recherche première ligne qui ne correspond pas". Je pense que le texte de la question est correct et les réponses sont bonnes. Mais je ne suis pas sûr que le titre de la question soit le bon. Je ne suis pas un orateur anglais natif (je suis français) et "la recherche inverse" pour moi signifie "la recherche en arrière". Ai-je raison? Qu'est-ce qui pourrait être un bon titre pour la question?