尝试创建一个删除行的perl脚本,范围从10到文件末尾

时间:2013-11-12 15:36:22

标签: linux perl vim

我正在尝试创建一个使用vim删除文件行的Perl脚本。我想自动执行此任务,因为我必须一遍又一遍地删除这些行。这是我到目前为止编写的脚本,但它不起作用。

#!/usr/bin/perl 
my $PROG        = 'hwdr';
my $PERS        = "/u/blh/scripts/70-persistent-net.rules";
open (IN, $PERS) || die "Cannot open file".$PERS."for read";
@lines = <IN>;
close IN;

open (OUT, ">", $PERS) || die "Cannot open file. Please run as root".$PERS."for write";
foreach $line (@lines)
{
    $line =~ 8,10d ;
    print OUT $line;
}

close OUT;

感谢您的帮助

3 个答案:

答案 0 :(得分:2)

使用$.跟踪行号:

while (<IN>) {
    last if $. > 10;
    print;
}

使用就地编辑的单行版本:

perl -pi -e '$. > 10 && exit;' /u/blh/scripts/70-persistent-net.rules

答案 1 :(得分:2)

尝试使用sed

sed -i '10,$d' file

答案 2 :(得分:0)

作为一个例子(因为你似乎想要一个perl脚本):

输入(nums.txt):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

脚本:

#!/usr/bin/perl -w
use strict; 

my $file = 'nums.txt';

open my $in,  '<',  $file  or die "Can't read old file: $!";
open my $out, '>', "new.$file" or die "Can't write new file: $!";

my $line_count = 0;
while( <$in> )
    {
    $line_count++;
    next if $line_count >= 10;
    print $out $_;
    }

输出(new.nums.txt):

1
2
3
4
5
6
7
8
9