我需要您的专业帮助来使用 perl 修复此正则表达式代码?
我有这个数据文件...
__Data__
SCSI - test-A
ccccccccccccccccc
aaaaaaaaaaaaaaaaa
bbbbbbbbbbbbbbbbb
__Data__
SCSI - test-B
ccccccccccccccccc
aaaaaaaaaaaaaaaaa
bbbbbbbbbbbbbbbbb
__Data__
SCSI - test-C
ccccccccccccccccc
aaaaaaaaaaaaaaaaa
bbbbbbbbbbbbbbbbb
我想要以下输出
__Data__
SCSI - test-A
__Data__
SCSI - test-B
__Data__
SCSI - test-C
相反,我得到的输出缺少__Data__
对于两个数据记录。
__Data__
SCSI - test-A
SCSI - test-B
SCSI - test-C
这里的代码..
$/ = "__Data__"; # setting the input separator variable to __Data__
while(<ReadFile>)
{
$_ =~ s/(SCSI.*test-(A|B|C)?)(.*)/$1/ms;
print $_;
}
你告诉 Perl 该行以__DATA__
,所以你得到
1: "__Data__"
2: "\nSCSI - test-A\nccc\naaa\nbbb\n\n__Data__"
3: "\nSCSI - test-B\nccc\naaa\nbbb\n\n__Data__"
4: "\nSCSI - test-C\nccc\naaa\nbbb\n"
但你错误地认为你得到了
1: "__Data__\nSCSI - test-A\nccc\naaa\nbbb\n\n"
2: "__Data__\nSCSI - test-B\nccc\naaa\nbbb\n\n"
3: "__Data__\nSCSI - test-C\nccc\naaa\nbbb\n"
解决方案:
my $after_data = 0;
while (<>) {
if (/^__Data__$/) {
print;
$after_data = 1;
}
elsif ($after_data) {
print;
print "\n";
$after_data = 0;
}
}
您还可以使用段落模式:
local $/ = '';
while (<>) {
print /^(.*\n.*\n)/;
print "\n";
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)