Вопрос по perl – Как я могу получить несколько строк после совпадающей строки в Perl?

11

Я построчно анализирую большой файл в Perl (завершается \ n), но когда я достигаю определенного ключевого слова, скажем «TARGET», мне нужно перехватить все строки между TARGET и следующей полностью пустой строкой ,

Итак, учитывая сегмент файла:

Строка 1
Линия 2
Линия 3
Линия 4 Цель
Строка 5 Захватите эту строку
Строка 6 Захватите эту строку
\ п

Это должно стать:
Линия 4 Цель
Строка 5 Захватите эту строку
Строка 6 Захватите эту строку

Причина, по которой у меня возникают проблемы, заключается в том, что я уже перебираю файл построчно; Как мне изменить то, что я делим в середине процесса разбора?

Ваш Ответ

9   ответов
0

Error: User Rate Limit ExceededTARGETError: User Rate Limit Exceeded

s2p -ne '/TARGET/,/^$/p'

Error: User Rate Limit ExceededsedError: User Rate Limit Exceeded

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
14

Error: User Rate Limit Exceeded идеально подходит для такого рода задач:

$ cat try
#! /usr/bin/perl

while (<DATA>) {
  print if /\btarget\b/i .. /^\s*$/
}

__DATA__
Line 1
Line 2
Line 3
Line 4 Target
Line 5 Grab this line
Line 6 Grab this line

Nope
Line 7 Target
Linu 8 Yep

Nope again

$ ./try
Line 4 Target
Line 5 Grab this line
Line 6 Grab this line

Line 7 Target
Linu 8 Yep
Error: User Rate Limit Exceeded
0
while (<IN>) {
print OUT if (/Target/../^$/) ; 
}   
23

Error: User Rate Limit Exceeded

my @grabbed;
while (<FILE>) {
    if (/TARGET/) {
        push @grabbed, $_;
        while (<FILE>) {
            last if /^$/;
            push @grabbed, $_;
        }
    }
}
Error: User Rate Limit ExceededitError: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded Dirk
4

Error: User Rate Limit ExceededError: User Rate Limit ExceededError: User Rate Limit ExceededError: User Rate Limit Exceeded


Error: User Rate Limit Exceeded

perl -ne 'print if /START/ .. /END/' file1 file2 ...

Error: User Rate Limit Exceeded

perl -0777 -ne 'print "$1\n" while /START(.*?)END/gs' file1 file2 ...

Error: User Rate Limit Exceeded

Error: User Rate Limit Exceeded

while (<>) {
    $in_header =   1  .. /^$/;
    $in_body   = /^$/ .. eof;
# now choose between them
} continue {
    $. = 0 if eof;  # fix $.
}
2
while(<FILE>)
{
    if (/target/i)
    {
        $buffer .= $_;
        while(<FILE>)
        {
            $buffer .= $_;
            last if /^\n$/;
        }
    }
}
10

$/$/ в"\n\n"

English$/ называется$RS или же$INPUT_RECORD_SEPARATORIO::HandleIO::Handle->input_record_separator( "\n\n")

local $/;$/"\n".

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceededuse English;Error: User Rate Limit Exceededuse English '-no_match_vars';Error: User Rate Limit Exceeded
1
use strict;
use warnings;

my $inside = 0;
my $data = '';
while (<DATA>) {
    $inside = 1 if /Target/;
    last if /^$/ and $inside;
    $data .= $_ if $inside;
}

print '[' . $data . ']';

__DATA__
Line 1
Line 2
Line 3
Line 4 Target
Line 5 Grab this line
Line 6 Grab this line

Next Line

Error: User Rate Limit Exceeded

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
0

Error: User Rate Limit Exceeded

my @grabbed;
my $grabbing = 0;
while (<FILE>) {
    if (/TARGET/ ) {
       $grabbing = 1;
    } elsif( /^$/ ) {
       $grabbing = 0;
    }
    if ($grabbing) {
        push @grabbed, @_;
    }
}
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded Dirk
Error: User Rate Limit Exceeded

Похожие вопросы