这个可能用的着,在看日志时候,比如搜索tomcat 错误日志的时候
1、perl One-liner实现
1 |
perl -ne '/RE/ and {push @a,$.};push @b,$_;END{for(@a){print $b[$_-2];print $b[$_-1];print $b[$_]}}' file |
实现原理:把每一行保存在一个数组@b里,把匹配的行号保存在素组@a里,然后在END模块打印出来
2、perl脚本实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
#!/usr/bin/env perl $re=shift; $file=shift; open $line,"<",$file or die; while(<$line>) { push @b,$_; $i++; chomp; /$re/ and push(@a,$i) ; } close $line; for(@a) { print $b[$_-2]; print $b[$_-1]; print $b[$_]; } |
保存为xx.pl 然后chmod u+x xx.pl
./xx.pl RE file