我有一个包含多行的文本文件,例如:
amanda: foo
robert: bla
amanda: bar
peter: da
我想删除amanda
的所有行。我使用ctrl-s
并单独杀死每一行。可以一次删除所有行吗?
答案 0 :(得分:6)
M-x delete-matching-lines
。可以使用正则表达式。
答案 1 :(得分:1)
一种方法是将query-replace-regexp
的正则表达式^.*amanda.*$
用于空字符串。
答案 2 :(得分:1)
虽然@Marcos's answer是惯用的(你应该使用它),但我们来探索其他变体。假设您有一个文本缓冲区,并且要删除其中包含li
的行:
Vladimir
Ilich
Ulyanov
请注意,^
与正则表达式中的行首和$
行尾匹配。 $
不会触及该行后的换行符,因此使用正则表达式^.*li.*$
替换将生成一个空行,符合@ataylor's answer:
Vladimir
Ulyanov
出于某种原因,在^
之前和$
之后的正则表达式中无法匹配,因此\s-^.*li.*$
或^.*li.*$\s-
将无效。注意,\s-
匹配任何空白字符(即空格,制表符,换行符和回车符),因此直觉上正则表达式也应该删除换行符,因为换行符是^
之前唯一可能的空格字符或$
之后。要准确匹配换行符,您应该逐字输入, C-q C-j 默认情况下。 Emacs经常用单独的字体颜色表示换行符^J
,它不是^
和J
的序列,而是单个字符,请注意。
因此,要删除包含li
的行,您可以在字符串query-replace-regexp
上运行命令^.*li.*^J
,其中^J
是换行符:
Vladimir
Ulyanov