删除所有不以3位数字开头的行

时间:2018-05-27 08:42:41

标签: shell sed

删除所有不以3位数字开头的行。 我使用下面的sed命令,但它也删除了标题。

如何从第2行开始下面的命令,以便标题保持原样。

sed -n '/^[0-9]\{3\}/p' my_file

我也使用过以下版本但不起作用。

sed -n '2,${/^[0-9]\{3\}/p}' my_file

4 个答案:

答案 0 :(得分:2)

使用awk:

$ cat foo
Title
11 test
222 test
test
$ awk '/^[0-9]{3}/ || NR==1' foo
Title
222 test

修改: 标题是第一行。所以这个命令应该从第2行开始。

$ awk '/^[0-9]{3}/ || NR>1' foo
222 test

答案 1 :(得分:2)

你几乎就在那里。您所需要做的就是:

sed -e '2,${/^[0-9]\{3\}/d}' my_file

这将从第二行开始执行脚本(排除第一行,我认为它是你正在谈论的标题)。

答案 2 :(得分:0)

对于portability,请尝试:

sed -n '1p;2,${/^[0-9][0-9][0-9]/p}' my_file

sed -in '1p;2,${/^[0-9][0-9][0-9]/p}' my_file直接编辑 my_file

答案 3 :(得分:0)

这可能适合你(GNU sed):

sed -i '1b;/^[0-9]\{3\}/!d' file

不要处理第一行。如果此后的任何行不以至少3位数开头,则将其删除。

N.B。 -i选项用修改后的文件替换旧文件的内容。如果在sed命令之后放置了多个文件,它们将被单独处理,即每个文件头将保留。要在不写入文件的情况下实现相同的效果,请使用-s选项。

另一种方式:

sed '/^[0-9]\{3\}/b;1!d' file