-1

我有一个包含多个 .txt 文件的文件夹。我想检查这些文本文件中的几个字符串,并将输出作为 out.txt 输出,其中 5 行以上和 5 行以下定位的字符串。

4

2 回答 2

2

使用 grep 更容易:

grep -A 5 -B 5 'searchstring' *.txt > a.out

使用 Perl :-)

use strict;use warnings;
`grep -A 5 -B 5 'searchstring' *.txt > a.out`;
die "Something went wrong: $!" if $?;
于 2013-07-11T08:39:39.737 回答
1

如果您坚持使用 perl oneliner;

perl -n -e 'if (/searchStringHere/) {print "\n\n\n\n\n$_\n\n\n\n\n"}' *.txt

如果 grep 解决方案适合您,我认为它更优雅......

更新

让我感到震惊的是,您可能是 Windows 用户,所以您没有 grep ...

此代码未经测试,因为我没有在这台机器上安装 perl,但它应该可以工作:!#yourperl/perl

$flag, $l1, $l2, $l3, $l4, $l5, $l6;
$cnt = 5;
$file = shift;
open("$file") || die "can't open $file\n";
while (<>) {
 $l1 = $l2; # starting with reserving the lines for back print
 $l2 = $l3;
 $l4 = $l5;
 $l5 = $l6;
 $l6 = $_;
 if (/your string here/) {
   $cnt = 5;
   print ($l1$l2$l3$l4$l5$l6);# print line + 5 prev lines
   next
 }
 if ($cnt >0) { # print the next 5 lines
    print $l6;
    $cnt--;
 } 
}
于 2013-07-11T08:49:52.377 回答