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-lines
和Mx delete-matching-lines
如果您正在寻找“修补程序”,则可以通过使用来识别不匹配^Patch
的行
^([^P]|P[^a]|Pa[^t]|Pat[^c]|Patc[^h])[^\r\n]*$
我承认,这是相当丑陋的。 =)