gpt4 book ai didi

perl - 如何打印匹配的行,紧靠其上方的一行和紧邻其下方的一行?

转载 作者:行者123 更新时间:2023-12-03 18:07:44 25 4
gpt4 key购买 nike

从 Bi 提出的相关问题中,我已经学会了如何将匹配的行与其下方的行一起打印。代码看起来很简单:

#!perl
open(FH,'FILE');
while ($line = <FH>) {
if ($line =~ /Pattern/) {
print "$line";
print scalar <FH>;
}
}

然后我在 Google 上搜索了一个不同的代码,该代码可以打印匹配的行以及它们正上方的行。部分适合我的目的的代码是这样的:
#!perl

@array;
open(FH, "FILE");
while ( <FH> ) {
chomp;
$my_line = "$_";
if ("$my_line" =~ /Pattern/) {
foreach( @array ){
print "$_\n";
}
print "$my_line\n"
}
push(@array,$my_line);
if ( "$#array" > "0" ) {
shift(@array);
}
};

问题是我仍然不知道如何一起做。看来我的大脑正在关闭。有没有人有任何想法?

谢谢你的帮助。

更新:

我想我有点感动。你们真是太有帮助了!也许有点跑题了,但我真的有想说更多的冲动。

我需要一个能够搜索多个文件的内容并显示相关信息而无需单独打开每个文件的 Windows 程序。我尝试了谷歌搜索,两个应用程序 Agent Ransack 和 Devas 被证明是有用的,但它们只显示包含匹配查询的行,我还想查看相邻的行。然后,即兴创作一个节目的想法出现在我的脑海中。多年前,我对一个 Perl 脚本印象深刻,它可以生成 Wikipedia 的 Tomeraider 格式,这样我就可以在 Lifedrive 上轻松搜索 Wiki,而且我还在网上的某个地方读到 Perl 很容易学习,特别是对于像我这样的人没有任何编程语言的经验。然后几天前我开始自学 Perl。我的第一步是学习如何完成与“Agent Ransack”相同的工作,事实证明使用 Perl 并不难。我最初是通过修改《Perl by Example》一书中使用的示例,学会了如何搜索单个文件的内容并显示匹配的行,但我被困在那里。我对如何处理多个文件完全一无所知。书中没有找到类似的例子,或者可能是我太不耐烦了。然后我再次尝试谷歌搜索并被带到这里,我问了我的第一个问题“如何在 Perl 中搜索多个文件以查找字符串模式?”在这里,我必须说这个论坛太棒了;)。然后我查看了更多示例脚本,然后我昨天想出了以下代码,它很好地满足了我的原始目的:

代码是这样的:
#!perl

$hits=0;
print "INPUT YOUR QUERY:";
chop ($query = <STDIN>);
$dir = 'f:/corpus/';
@files = <$dir/*>;
foreach $file (@files) {
open (txt, "$file");

while($line = <txt>) {
if ($line =~ /$query/i) {
$hits++;
print "$file \n $line";
print scalar <txt>;
}
}
}
close(txt);
print "$hits RESULTS FOUND FOR THIS SEARCH\n";

在“语料库”文件夹中,我有很多文本文件,包括包含以下内容的 srt pdf doc 文件:

然后我把尸体扔了。

J'ai mis le corps dans une décharge。

我知道你有电线。

Je sais que tu as un micro。

现在我要告诉你真相。

Alors je vais te dire la vérité。

基本上我只需要搜索一个英语短语并查看对应的法语短语,所以我昨天完成的脚本非常令人满意,只是如果我的脚本可以显示以上行,以防我想搜索法语短语和检查英语。所以我正在尝试改进代码。实际上我知道“打印标量”是有问题的,但它很整洁并且至少在大部分时间都可以完成打印后续行的工作)。我什至期待 ANOTHER SINGLE magic line 打印前一行而不是后续 :) Perl 似乎很有趣。我想我会花更多的时间来尝试更好地理解它。按照 daotoad 的建议,我会研究你们慷慨提供的代码。再次谢谢各位!

最佳答案

使用 grep 可能会更容易为此,它允许在匹配前后打印行。使用 -B-A分别在匹配前后打印上下文。见 http://ss64.com/bash/grep.html

关于perl - 如何打印匹配的行,紧靠其上方的一行和紧邻其下方的一行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1523846/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com