Emacs,删除所有不匹配的行?

在对文本文件进行大的修改时,我经常使用(query-replace-regexp "from" "to")expression式中的(query-replace-regexp "from" "to")

我想要一个正则expression式,如果存在,删除所有匹配的行。 例如,在用于构buildRPM的RedHat SPEC文件中,我只想保留以/^Patch/开头的行(并删除所有不匹配的行)。 用grep -E '^Patch'很容易,但Emacs有没有办法?

我试过了:

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

无济于事(负面看起来不受支持)。

有任何想法吗?

尝试Mx保持行^补丁,而不是:

(keep-lines REGEXP &optional RSTART REND INTERACTIVE)

删除除REGEXP匹配项外的所有行。

也有相反的命令, Mx flush-lines ,它删除匹配正则expression式的行。

使用Mx delete-non-matching-linesMx delete-matching-lines

如果您正在寻找“修补程序”,则可以通过使用来识别不匹配^Patch的行

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

我承认,这是相当丑陋的。 =)