Perl:根据用户输入从文件中获取行

时间:2011-02-17 04:49:30

标签: perl

  

可能重复:
  How can I implement Unix grep in Perl?

无论如何,我是否可以编写一个perl脚本来打印包含用户输入字符串的文件中的所有行?

5 个答案:

答案 0 :(得分:5)

这个答案有两个不同的概念:

  1. 文件IO,并在一段时间内遍历所有行
  2. 正则表达式,尤其是将变量传递给正则表达式。
  3. 注意使用quotemeta。当用户输入包含RE特定字符时,这一点很重要(如果你不处理它,甚至可能会创建一个illigel RE。)

    以下是代码:

    print "Looking for: ";
    my $input = <>;
    chomp $input;
    my $re = quotemeta $input;
    
    open my $fh, "<", "myfile.txt" or die $!;
    while( <$fh> ) {
        print if /$re/;
    }
    close $fh;
    

答案 1 :(得分:1)

添加正则表达式修饰符“ep>

print "Name: ";
my $string = <>;

open FILE, "test.txt" or die $!;

while(<FILE>) {
    chomp;
     print "$_\n" if(/$string*/i);
}
close FILE;

答案 2 :(得分:0)

哦,想通了怎么做。结果很简单 但是,如果我不希望搜索区分大小写,我该怎么做呢?

print "Name: ";
my $string = <>;

open FILE, "test.txt" or die $!;

while(<FILE>) {
    chomp;
     print "$_\n" if(/$string*/);
}
close FILE;

答案 3 :(得分:0)

一个班轮:

perl -nE 'BEGIN{$pattern=shift};say if /$pattern/i' pattern filename(s)

perl -nE 'BEGIN{$pattern=shift};say "$ARGV $.: $_" if /$pattern/i' pattern filename(s) 

获取文件和行号。

答案 4 :(得分:0)

你的while循环体有点复杂。这也有效:

while (<FILE>) { print if /$string/i }

无需选择换行符,然后将其重新添加。