2

我有一个包含多行的文本文件,例如:

amanda: foo
robert: bla
amanda: bar
peter: da

我想删除所有带有amanda. 我ctrl-s单独使用和杀死每一行。是否可以一次删除所有行?

4

3 回答 3

6

M-x delete-matching-lines. 可以使用正则表达式。

于 2012-12-06T23:10:41.457 回答
1

一种方法是与空字符串query-replace-regexp的正则表达式一起使用。^.*amanda.*$

于 2012-12-06T23:11:11.627 回答
1

尽管@Marcos 的答案是惯用的(您应该使用它),但让我们探索其他变体。假设您有一个文本缓冲区,并且您想删除其中包含的一行li

Vladimir
Ilich
Ulyanov

请记住,这^匹配$正则表达式中的行首和行尾。$不会触及行后的换行符,因此根据@ataylor的回答^.*li.*$,用正则表达式替换会产生一个空行:

Vladimir

Ulyanov

^由于某种原因,在正则表达式之前和之后是不可能匹配$的,因此\s-^.*li.*$^.*li.*$\s-不会起作用。请注意,\s-匹配任何空白字符(即空格、制表符、换行符和回车符),因此直观上正则表达式也应该删除换行符,因为换行符是 . 之前^或之后唯一可能的空白字符$。要完全匹配换行符,您应该逐字输入,C-q C-j默认情况下。Emacs 经常将换行符用单独的字体颜色表示为^J,它不是 and 的序列^J而是单个字符,请注意。

因此,要删除包含 的行,您可以在 string 上li运行命令,其中是换行符:query-replace-regexp^.*li.*^J^J

Vladimir
Ulyanov
于 2014-06-07T14:49:23.330 回答