代码之家  ›  专栏  ›  技术社区  ›  PP.

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

  •  44
  • PP.  · 技术社区  · 15 年前

    我用的是 (query-replace-regexp "from" "to") 在文本文件中进行较大更改时定期使用表达式。

    如果有一个正则表达式,我想删除所有的行 不要 匹配。例如,在构建RPM的RedHat规范文件中,我想离开 只是 开始于 /^Patch/ 并删除所有不匹配的行。很容易 grep -E '^Patch' 但是在Emacs中有办法吗?

    我试过:

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

    无效(不支持负展望)。

    有什么主意吗?

    3 回复  |  直到 15 年前
        1
  •  89
  •   Trey Jackson    15 年前

    尝试 M-x保持线^Patch 相反:

    (keep-lines REGEXP &optional RSTART REND INTERACTIVE)

    删除所有行,但包含REGEXP匹配项的行除外。

    还有相反的命令, M-x冲洗管线 ,它删除与regexp匹配的行。

        2
  •  21
  •   Benny Mohr    15 年前

    使用 M-x delete-non-matching-lines M-x delete-matching-lines

        3
  •  5
  •   Jens    15 年前

    如果只是你要找的“补丁”,你可以识别不匹配的行 ^Patch 通过使用

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

    不过,我承认,它相当难看。=)