如何删除perl中每行中某个字符后的所有字符?

时间:2016-02-16 22:51:05

标签: regex perl

我有一个我正在阅读的文件,我试图删除特定字符后的所有内容,例如" ["。我列出了下面的代码:

while($line = <INFILE>) {
    print "$line \n";
}

有些行会有&#34; [等等等等等等]&#34;我需要删除第一个括号后的所有内容,包括每行的第一个括号,非常感谢任何帮助!

2 个答案:

答案 0 :(得分:2)

要打印特定字符串$delim的第一个出现位置:

while (<INFILE>) {
    printf "%s\n", substr($_, 0, index($_, $delim));
}

这将找到字符串第一次出现的索引,并从第一个字符(0)开始打印,但不包括第一次出现的索引。

另一种选择是使用正则表达式:

while (<$fh>) {
    s/\Q$delim\E.*$//m;
    print;
}

请注意\Q\E分隔符,以防止正则表达式引擎解释,例如[作为正则表达式元字符。

答案 1 :(得分:-4)

由于您提到要将行存储在数组中,请执行以下操作。

my @arr = ();
while(<INFILE>){
     chomp;
     push @arr, $_;
}
foreach my $item (@arr){
     #process lines as you see fit here
}