Perl:从具有特定字符串的文本文件中删除多行

时间:2013-09-05 16:59:31

标签: perl

我有一个文本文件,其中包含下述格式的数据..

@rectype='ABC' @recname='123'   @rec_id='1K2j' etc...
@rectype='DEF' @recname='matin' @rec_id='458i' etc...
@rectype='ABC' @recname='John'  @rec_id='lom0' etc...
@rectype='GHI' @recname='Kalme, @rec_id='pl90' etc...
@rectype='KLM' @recname='Kitty' @rec_id='987k' etc...
@rectype='ABC' @recname='OMR'   @rec_id='lo09' etc...

现在,我必须删除所有@rectype =' ABC' ...在输入文件中有多行此类。这是一种紧急的,因为我是不是一个perl编码器,我发现很难找到方法。

请建议!!!

注意:我只需要在输入文件中进行更改。我不需要创建单独的输出文件。

3 个答案:

答案 0 :(得分:5)

您不需要在Perl中执行此操作。您可以使用grep工具。

grep -v "@rectype='ABC'" input_file > output_file

grep -v表示“打印与此表达式不匹配的每一行。”

答案 1 :(得分:2)

perl -i -ne 'print if !/\@rectype = \047ABC\047/x' text_file

答案 2 :(得分:1)

#!/usr/bin/perl
use warnings;
use strict;
use File::Slurp;

my $output = 'output.txt';
open my $outfile, '>', $output or die "Can't write to $output: $!";

my @array = read_file('input.txt');
for (@array){
        next if ($_ =~ /^\@rectype='ABC'/);     
        print $outfile $_ ;
}

输出(保存到'output.txt'):

@rectype='DEF' @recname='matin' @rec_id='458i' etc...
@rectype='GHI' @recname='Kalme, @rec_id='pl90' etc...
@rectype='KLM' @recname='Kitty' @rec_id='987k' etc...