-2
keyword harry /
sally/
tally/

希望每当字符串与关键字匹配时,它也应该寻找“/”字符。这表示行的延续

然后我想要输出为

keyword harry sally tally 
==========================

我当前的代码:

#!/usr/bin/perl
open (file2, "trial.txt");

$keyword_1 = keyword;
foreach $line1 (<file2>) {
  s/^\s+|\s+$//g;
  if ($line1 =~ $keyword_1)    {
    $line2 =~ (s/$\//g, $line1) ;
    print " $line2 " ;
  }
}
4

4 回答 4

1

如果=====您的问题中的行应该在输出中,则使用

#! /usr/bin/env perl

use strict;
use warnings;

*ARGV = *DATA;  # for demo only; delete

sub print_line {
  my($line) = @_;
  $line =~ s/\n$//;  # / fix Stack Overflow highlighting
  print $line, "\n",
        "=" x (length($line) + 1), "\n";
}

my $line = "";
while (<>) {
  $line .= $line =~ /^$|[ \t]$/ ? $_ : " $_";

  if ($line !~ s!/\n$!!) {  # / ditto
    print_line $line;
    $line = "";
  }
}

print_line $line if length $line;

__DATA__
keyword jim-bob
keyword harry /
sally/
tally/

输出:

关键词吉姆鲍勃
=================
关键词 harry sally 理货
===========================
于 2012-05-22T12:59:03.137 回答
0

Aredo在处理连接续行时很有用。

my $line;
while ( defined( $line = <DATA> )) {
    chomp $line;
    if ( $line =~ s{/\s*$}{ } ) {
        $line .= <DATA>;
        redo unless eof(DATA);
    }
    $line =~ s{/}{};
    print "$line\n";
}
__DATA__
keyword harry /
sally/
tally/
and
done!!!

$ ./test.pl
keyword harry  sally tally and
done!!!
于 2012-05-22T12:31:44.217 回答
0

您没有指定如何处理不包含关键字的行。不过,您可能会将此代码用作灵感:

#!/usr/bin/perl
use warnings;
use strict;

my $on_keyword_line;
while (<>) {
    if (/keyword/ or $on_keyword_line) {
        chomp;

        if (m{/$}) {
            chop;
            $on_keyword_line = 1;

        } else {
            $on_keyword_line = 0;

        }
        print;

    } else {
        $on_keyword_line = 0;
        print "\n";
    }
}
于 2012-05-21T23:48:22.027 回答
0

我认为您需要简单地连接所有以斜杠结尾的行,而不管关键字如何。

我建议这个代码。

更新以说明 OP 的评论,即续行由反斜杠终止。

while (<>) {
  s|\\\s*\z||;
  print;
}
于 2012-05-22T05:18:16.607 回答