sed one-liner 删除任何以数字开头的行

sed one-liner 删除任何以数字开头的行

在此输入图像描述

假设我正在处理这个文件。

第一个可见行的开头被遮挡,因此请忽略它。 43 是下一行的开始,该行将被删除。

下一行(以 44 开头并以句点结尾)将被删除。

下一行(仅由 424 组成)也消失了。

下一行(由“11.国王和英雄”组成)也消失了。

下一行保留。

答案1

我会用grep(1)这个:

grep -v '^[0-9]' filename

^[0-9]匹配以数字开头的任何行,并-v排除匹配的行,而不是包含。您还可以使用字符类[:digit:]来代替[0-9].

相反,-v您可以反转范围:

grep '^[^0-9]' filename

这将匹配任何不以数字开头的行,但不会匹配空白行。

对于grep,sedawk,我的一般规则是,对于匹配和简单提取,使用grep,对于无状态重写,使用sed,对于有状态修改,使用awk。这就是为什么我建议使用grep而不是sed按照您在问题中提出的要求(其他人已经回答了sed)。

答案2

sed -e '/^[0-9]/d' filename > filename.new

或就地修改

sed -i -e '/^[0-9]/d' filename

答案3

sed -e '/^[0-9].*$/d' oldfile > newfile

相关内容