我有一个包含多行的文本文件,例如:
amanda: foo
robert: bla
amanda: bar
peter: da
我想删除所有带有amanda
. 我ctrl-s
单独使用和杀死每一行。是否可以一次删除所有行?
我有一个包含多行的文本文件,例如:
amanda: foo
robert: bla
amanda: bar
peter: da
我想删除所有带有amanda
. 我ctrl-s
单独使用和杀死每一行。是否可以一次删除所有行?
M-x delete-matching-lines
. 可以使用正则表达式。
一种方法是与空字符串query-replace-regexp
的正则表达式一起使用。^.*amanda.*$
尽管@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