如何删除包含某些字符串的前10行?

时间:2017-07-11 15:54:22

标签: linux shell

假设我有一个具有此结构的文件

1001.txt
1002.txt
1003.txt
1004.txt
1005.txt
2001.txt
2002.txt
2003.txt
...

现在我如何删除以' 2'开头的前10行数?可能有超过10行以' 2'。

开头

我知道我可以使用grep '^2' file | wc -l查找以' 2'开头的行数。但是如何删除前10行的数字?

3 个答案:

答案 0 :(得分:2)

您可以通过此Perl one-liner管道列表:

perl -p -e '$_="" if (/^2/ and $i++ >= 10)'

答案 1 :(得分:0)

awk替代方案:

awk '{ if (substr($0,1,1)=="2") { count++ } if ( count > 10 || substr($0,1,1)!="2") { print $0 } }' filename

如果该行的第一个字符为2,则递增计数器。然后,如果count大于10或第一个字符不是2,则仅打印该行。

答案 2 :(得分:0)

awk中的另一个人。使用值2进行测试,因为您的数据只有3行相关数据。用10替换后者2.

$ awk '/^2/ && ++c<=2 {next} 1' file
1001.txt
1002.txt
1003.txt
1004.txt
1005.txt
2003.txt
.
.
.

说明:

$ awk '/^2/ && ++c<=2 {   # if it starts with a 2 and counter still got iterations left
    next                  # skip to the next record
} 1                       # (else) output
' file