[英]print lines below the matching line
目前,我正在從匹配模式中獲取第三行。 在這種情況下q33BDrP9007220
是匹配的模式,將打印第三行,我也要打印第四行和第五行,但q33BDrP9007220
是第四行和第五行的模式與第三行模式匹配,然后將這三個電子郵件ID一起打印行之間用“,”分隔。
open (MYFILE,<$mailqdir);
while(<MYFILE>)
if(/(\w{14})/){
next unless \w{14})/ % 2;
$temp = scalar <MYFILE>;
$rf_id = $temp;
}
--------------輸入-----------------
q33BDrP9007220 50153 Tue Apr 3 16:43 <mohitnegi@yahoo.com>
(Deferred: 451 4.2.1 mailbox temporarily disabled: paond.tndt)
<tarunsharma@yahoo.com>
<tararma@yahoo.com>
<tarsharma@yahoo.com>
q33BDrP9007220 50153 Tue Apr 3 16:43 <mohitnegi@yahoo.com>
(Deferred: 451 4.2.1 mailbox temporarily disabled: paond.tndt)
<tnsharma@yahoo.com>
<tama@yahoo.com>
<harma@yahoo.com>
q33BDrP9007220 50153 Tue Apr 3 16:43 <mohitnegi@yahoo.com>
(Deferred: 451 4.2.1 mailbox temporarily disabled: paond.tndt)
<tarunrma@yahoo.com>
<taarma@yahoo.com>
<tsharma@yahoo.com>
此示例可能會幫助您:
#!/usr/bin/perl
use warnings;
use strict;
my @emails;
while (<DATA>) {
if (/^\w{14}\s/) {
<DATA>; # skip one line
output(@emails);
undef @emails; # forget emails
} elsif (/^\s+<([^>]+)>$/) {
push @emails, $1; # remember the email
}
}
# Print the last rememberd emails
output(@emails);
sub output {
print join(',', @_), "\n" if @_;
}
__DATA__
q33BDrP9007220 50153 Tue Apr 3 16:43 <mohitnegi@yahoo.com>
(Deferred: 451 4.2.1 mailbox temporarily disabled: paond.tndt)
<tarunsharma@yahoo.com>
<tararma@yahoo.com>
<tarsharma@yahoo.com>
q33BDrP9007220 50153 Tue Apr 3 16:43 <mohitnegi@yahoo.com>
(Deferred: 451 4.2.1 mailbox temporarily disabled: paond.tndt)
<tnsharma@yahoo.com>
<tama@yahoo.com>
<harma@yahoo.com>
q33BDrP9007220 50153 Tue Apr 3 16:43 <mohitnegi@yahoo.com>
(Deferred: 451 4.2.1 mailbox temporarily disabled: paond.tndt)
<tarunrma@yahoo.com>
<taarma@yahoo.com>
<tsharma@yahoo.com>
另外,在此處閱讀在StackOverflow上解析文件perl的信息-可能是由您的同事或同學發布的?
我不確定我是否完全理解了您的問題,還是開了一槍。
在while循環內,在第一個正則表達式之后,將電子郵件地址存儲在一個變量中。 例如my $addressList = $1;
並設置一個臨時變量my $temp = 1;
。 稍后,您可以執行if ($temp)
,如果下一行與您的正則表達式匹配,您將繼續追加到$ addressList變量,直到命中標記(q33BDrP9007220)。
高溫超導
這就是我要去的方式
use strict;
use warnings;
my $file="input_file.txt";
open (FILE,"<$file") or die "Can't open $file: $!";
my $contents = do { local $/; <FILE> };
my @arr=split('q33BDrP9007220', $contents);
foreach my $ele(@arr)
{
$ele =~ s/([a-zA-Z0-9_.]+@[a-zA-Z]+\.[a-zA-Z]{2,4})//;
$ele =~ s/.*?([a-zA-Z0-9_.]+@[a-zA-Z]+\.[a-zA-Z]{2,4})/$1 ,/sg;
print $ele;
}
您可以使用自己的電子郵件地址更改正則表達式([a-zA-Z0-9_.]+@[a-zA-Z]+\\.[a-zA-Z]{2,4})
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.