删除具有特定单词的行

时间:2012-12-06 22:56:10

标签: emacs

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

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

我想删除amanda的所有行。我使用ctrl-s并单独杀死每一行。可以一次删除所有行吗?

3 个答案:

答案 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