regex emacs

regex - Emacs, eliminando todas las líneas que no coinciden?



(3)

Prueba con Mx keep-lines ^ Patch en su lugar:

(keep-lines REGEXP &optional RSTART REND INTERACTIVE)

Eliminar todas las líneas, excepto las que contienen coincidencias para REGEXP.

También existe el comando opuesto, Mx flush-lines , que elimina las líneas que coinciden con una expresión regular.

Utilizo la expresión (query-replace-regexp "from" "to") regularmente cuando hago grandes cambios en un archivo de texto.

Me gustaría una expresión regular, si existe, para eliminar todas las líneas que no coinciden. Por ejemplo, en un archivo RedHat SPEC para construir un RPM, quiero dejar solo las líneas que comienzan con /^Patch/ en ellas (y eliminar todas las líneas que no coinciden). Lo suficientemente fácil con grep -E ''^Patch'' pero ¿hay alguna manera en Emacs?

Lo intenté:

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

en vano (look-up negativo aparece sin soporte).

¿Algunas ideas?


Si solo está buscando "Patch", puede identificar las líneas que no coinciden ^Patch usando

^([^P]|P[^a]|Pa[^t]|Pat[^c]|Patc[^h])[^/r/n]*$

Lo admito, es bastante feo, sin embargo. =)


utilice Mx delete-non-matching-lines y Mx delete-matching-lines