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 " ;
}
}
答案 0 :(得分: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/
输出:
keyword jim-bob ================ keyword harry sally tally ==========================
答案 1 :(得分: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";
}
}
答案 2 :(得分:0)
我认为您需要简单地连接以斜杠结尾的所有行,而不管关键字是什么。
我建议使用此代码。
更新了以说明OP的评论,即延迟行被反斜杠终止。
while (<>) {
s|\\\s*\z||;
print;
}
答案 3 :(得分:0)
在处理连续的连续行时,redo
非常有用。
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!!!