46 votes

Emacs, en supprimant toutes les lignes qui ne correspondent pas à #39;t?

J'utilise l' (query-replace-regexp "from" "to") expression régulièrement lors de la fabrication de grands changements dans un fichier texte.

J'aimerais une expression régulière, s'il existe, pour la suppression de toutes les lignes qui ne correspondent. Par exemple, dans une RedHat fichier SPEC pour la construction d'un RPM je veux laisser juste les lignes qui commencent par /^Patch/ en eux (et de supprimer tous les non-correspondance des lignes). Assez facile avec grep -E '^Patch' mais est-il un moyen dans Emacs?

J'ai essayé:

(query-replace-regexp "^\\(?!Patch\\)[^\r\n]*$" "")

en vain (négatif anticipation apparaît non pris en charge).

Des idées?

90voto

Gareth Rees Points 31350

Essayez M-x keep-lines ^Patch plutôt:

``

Supprimer toutes les lignes sauf celles contenant des allumettes pour REGEXP.

Il ya aussi la commande opposée, M-x flush-lines , qui supprime les lignes correspondant à un regexp.

22voto

Benny Mohr Points 81

l'utilisation et

5voto

Jens Points 14829

Si c'est juste "Patch" que vous recherchez, vous pouvez identifier les lignes ne correspondant pas `` en utilisant

Je l'avoue, il est plutôt laid, cependant. =)

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