删除所有不以3位数字开头的行。 我使用下面的sed命令,但它也删除了标题。
如何从第2行开始下面的命令,以便标题保持原样。
sed -n '/^[0-9]\{3\}/p' my_file
我也使用过以下版本但不起作用。
sed -n '2,${/^[0-9]\{3\}/p}' my_file
答案 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