可能重复:
How can I implement Unix grep in Perl?的Perl:充分利用文件系根据用户输入
反正是有,我可以写一个perl脚本中包含的文件打印出来的所有行用户输入的字符串?
可能重复:
How can I implement Unix grep in Perl?的Perl:充分利用文件系根据用户输入
反正是有,我可以写一个perl脚本中包含的文件打印出来的所有行用户输入的字符串?
哦,想通了怎么做。原来很简单 但是,如果我不想让搜索区分大小写,我该怎么办?
print "Name: ";
my $string = <>;
open FILE, "test.txt" or die $!;
while(<FILE>) {
chomp;
print "$_\n" if(/$string*/);
}
close FILE;
您应该添加一个`我`对模式匹配运算符:`/ $ string */i`。 – 2011-02-17 05:03:24
你也可能想`chomp $ string` – 2011-02-17 05:08:43
如果你想让程序更加简洁,用`print grep {/ $ string/i} `替换循环。请参阅:[perlretut](http://perldoc.perl.org/perlretut.html)和[perlre](http://perldoc.perl.org/perlre.html)。 – 2011-02-17 05:09:15
您添加的正则表达式修改器的 “i”
print "Name: ";
my $string = <>;
open FILE, "test.txt" or die $!;
while(<FILE>) {
chomp;
print "$_\n" if(/$string*/i);
}
close FILE;
一个内胆:
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)
获取文件和行号了。
你的while循环体有点复杂。这也适用于:
while (<FILE>) { print if /$string/i }
有没有必要终日啃食换行符,然后重新添加它
有这个回答两个不同的概念:
请注意使用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;
http://stackoverflow.com/questions/3848360/how-can-i-implement-unix-grep-in-perl的可能的复制 – 2011-02-17 04:54:48