emacs:反向搜索

Dat*_*ata 8 emacs

有没有办法进行反向搜索?我有一个非常大的日志文件,其中一个特定的模式填充了几十页

20100414 alpha beta
20100414 alpha beta
<few dozen pages>
20100414 alpha beta
20100414 gamma delta
20100414 gamma delta
<few dozen pages>
20100414 gamma delta
Run Code Online (Sandbox Code Playgroud)

问题是,我不知道"alpha beta"后会有什么文字.它可能是"伽玛三角洲"或其他东西.所以我想跳过包含"alpha beta"的所有行.

ost*_*lop 6

两个想法:

  1. M-x keep-lines <RET> REGEXP <RET>

    将删除所有与正则表达式不匹配的行

  2. M-x grep <RET> grep -nH -e "<REGEXP>" -v <FILE>

    会在NOT中找到包含正则表达式的所有行.

  • FWIW"flush-lines"与`keep-lines`相反,即删除匹配的行. (5认同)

Tre*_*son 1

我通常通过使用正则表达式搜索来解决这个问题

C-u C-r ^20100414 [^a]
Run Code Online (Sandbox Code Playgroud)

它搜索下一行“20100414”,这在大多数情况下都能达到目的。它会找到“gamma delta”行,但显然会错过看起来像“20100414 allegro”的行。

还有一个命令M-x flush-lines RE,它删除所有与正则表达式匹配的行RE。这确实会修改缓冲区。