Perl搜索字符串并从文本文件中获取整行

时间:2014-08-19 19:03:18

标签: perl

我想搜索一个字符串,并通过Perl脚本从文本文件中获取整行。

因此文本文件将如下所示。

data-key-1,col-1.1,col-1.2
data-key-2,col-2.1,col-2.2
data-key-3,col-3.1,col-3.2

这里我想应用data-key-1作为搜索字符串,并将整行输入Perl变量。

在这里,我希望在shell中完全替换grep "data-key-1" data.csv

在控制台中运行时,某些语法如下所示。

perl -wln -e 'print if /\bAPPLE\b/' your_file

但是如何将它放在脚本中呢?使用perl关键字,我们无法将其放入脚本中。有没有办法避免循环?

3 个答案:

答案 0 :(得分:5)

如果您知道为单行提供的命令行选项,您就会确切地知道在perl脚本中要写什么。当您读取文件时,您需要一个循环。循环的选择可以产生不同的结果性能。使用for循环读取一段时间比使用while循环读取文件更昂贵。

你的单行:

perl -wln -e 'print if /\bAPPLE\b/' your_file

基本上是在说:

  • -w:使用警告
  • -l:在处理之前从每行中压缩换行符,并在打印期间将其放回。
  • -n:创建隐式while(<>) { ... }循环以对每一行执行操作
  • -e:告诉perl解释器执行其后的代码。
  • 如果行包含单词print if /\bAPPLE\b/,则
  • APPLE打印整行。

所以要在perl脚本中使用上述内容,您可以:

#!usr/bin/perl

use strict;
use warnings;

open my $fh, '<', 'your_file' or die "Cannot open file: $!\n";

while(<$fh>) {
    my $line = $_ if /\bAPPLE\b/;
    # do something with $line
}

chomp在这里并不是真的需要,因为除了检查是否存在单词之外,你没有对该行做任何事情。

答案 1 :(得分:2)

open($file, "<filename");
while(<$file>) {
   print $_ if ($_ =~ /^data-key-3,/);

}

答案 2 :(得分:0)

use strict;
use warnings;

# the file name of your .csv file
my $file = 'data.csv';


# open the file for reading
open(FILE, "<$file") or
 die("Could not open log file. $!\n");

 #process line by line:
while(<FILE>) {

 my($line) = $_;

 # remove any trail space (the newline)
 # not necessary, but again, good habit
 chomp($line);


my @result = grep (/data-key-1/, $line);
push (@final, @result); 
}
print @final;