代码之家  ›  专栏  ›  技术社区  ›  Alexander Bird

带有负匹配的regex(即,查找不匹配regex的字符串)

  •  30
  • Alexander Bird  · 技术社区  · 16 年前

    我有一个日志文件,在某些行上有字符串“错误”。我想删掉每一行 有错误,这样我就可以看到什么需要修复。我打算在Vim中做如下的事情:

    %S/!(错误)/ /

    用空字符串替换非错误行。

    我不相信标准的正则表达式能做到这一点,但也许我错了…

    5 回复  |  直到 16 年前
        1
  •  53
  •   too much php    16 年前

    使用 :g! 命令删除所有不匹配的行。

    :g!/ERROR/d
    
        2
  •  8
  •   Greg Hewgill    16 年前

    在VIM中,可以对缓冲区中的文本运行任何过滤器命令。例如,

    :%!grep ERROR
    

    将仅用与给定正则表达式匹配的行替换整个缓冲区。

    这不仅对 grep 例如,可以使用 :%!sort . 或者,您可以使用 V 命令标记块,然后 :!filter-command (VIM将自动填写 '<,'> 用于指示当前标记的块)。

        3
  •  1
  •   ghostdog74    16 年前

    如果是on*nix,可以使用grep-v或awk

    awk '!/ERROR/' file | more 
    

    在Windows计算机上,可以使用findstr

    findstr /v /c:ERROR file | more
    
        4
  •  1
  •   Alexander Bird    15 年前

    使用A negative lookahead 工作。

        5
  •  0
  •   Jaelebi    16 年前

    将使用负匹配regex^ 例如,[^e]将匹配除e之外的所有内容。