在Perl中,如何在文件中搜索字符串然后打印它所在的行?

dri*_*pie 0 printing string perl line match

这似乎有点补救.

我可以搜索一个文件,我可以打印一行,但对于我的生活,我无法弄清楚如何将两者放在一起.

ike*_*ami 6

只需在每次读取一行时递增一个计数器.

my $line;
while (<>) {
   ++$line;
   print "$line: $_" if /foo/;
}
Run Code Online (Sandbox Code Playgroud)

也就是说,Perl已经为你做到了.

while (<>) {
   print "$.: $_" if /foo/;
}
Run Code Online (Sandbox Code Playgroud)

如果要支持多个文件,

while (<>) {
   print "$ARGV:$.: $_" if /foo/;
   close(ARGV) if eof;  # Reset line counter for each file.
}
Run Code Online (Sandbox Code Playgroud)

(缺乏parens eof是重要的.)

  • 如果你想支持多个文件,你需要添加`close ARGV if eof;`来重置每个文件的计数器.('eof`缺乏parens意义重大.)@ hobbs (2认同)