【问题标题】:Perl Script: Search for string from a folder with multiple files [closed]Perl 脚本:从包含多个文件的文件夹中搜索字符串 [关闭]
【发布时间】:2013-07-12 02:51:22
【问题描述】:

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

【问题讨论】:

  • 使用 grep 和 -C 5 选项
  • 随心所欲 perl:ack
  • 欢迎来到 SO。在这里,请拨打tour
  • 如果存在以下问题,则很难回答问题:1)没有代码,2)没有输入数据,3)没有预期的结果。

标签: perl


【解决方案1】:

使用 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 $?;

【讨论】:

    【解决方案2】:

    如果你坚持使用 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--;
     } 
    }
    

    【讨论】:

    • 请注意,如果您打算一次又一次地查找,您只需要一组\n\n\n\n\n - 另一个将由下一个搜索结果生成。如果保持原样,则在查找列表中间的每两个结果之间将有 10 行。
    • 据我了解,OP 想要搜索关键字周围的上下文。不是空行。
    • 哦,所以我误解了他的意思。在这种情况下, grep -C 可以完美地完成
    猜你喜欢
    • 1970-01-01
    • 2012-10-07
    • 2016-07-02
    • 1970-01-01
    • 2011-12-07
    • 1970-01-01
    • 1970-01-01
    • 2022-01-07
    • 2023-02-21
    相关资源
    最近更新 更多