0

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

#!/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;

谢谢你的帮助

4

3 回答 3

2

用于$.跟踪行号:

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

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

perl -pi -e '$. > 10 && exit;' /u/blh/scripts/70-persistent-net.rules
于 2013-11-12T16:32:54.540 回答
2

尝试使用sed

sed -i '10,$d' file
于 2013-11-12T16:46:43.617 回答
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
于 2013-11-12T15:48:24.510 回答