在文本文件中进行大量更改时,我会定期使用(query-replace-regexp "from" "to")
表达式。
我想要一个正则表达式(如果存在),用于删除不匹配的所有行。例如,在用于构建RPM的RedHat SPEC文件中,我想让只以/^Patch/
开头的行(并删除所有不匹配的行)。使用grep -E '^Patch'
很容易,但在Emacs中是否有办法?
我试过了:
(query-replace-regexp "^\\(?!Patch\\)[^\r\n]*$" "")
无效(负面预测似乎不受支持)。
有什么想法吗?
答案 0 :(得分:87)
尝试 M-x keep-lines ^ Patch :
(keep-lines REGEXP &optional RSTART REND INTERACTIVE)
删除除REGEXP匹配项以外的所有行。
还有相反的命令, M-x flush-lines ,它删除与正则表达式匹配的行。
答案 1 :(得分:20)
使用M-x delete-non-matching-lines
和M-x delete-matching-lines
答案 2 :(得分:4)
如果您只是寻找“补丁”,则可以使用
识别与^Patch
不匹配的行
^([^P]|P[^a]|Pa[^t]|Pat[^c]|Patc[^h])[^\r\n]*$
我承认,这是相当丑陋的。 =)