在搜索重复标记之间的字符串时需要一些帮助 我有一个文本文件,其中以下格式在文件中重复多次
==========文件名:fixed_am_7bitLI_HE10.txt测试用例:Test_Case_1 START ==========
第1座 TC ID OK
第2座 输入部分确定 数据部分确定
第3组 输入部分确定 数据部分确定
第4座 输入部分确定 数据部分确定
==========文件名:fixed_am_7bitLI_HE10.txt测试用例:Test_Case_2 START ========
第1座 TC ID OK
第2座 输入部分确定
数据部分DIFFERS
第3组 输入部分确定 数据部分确定
第4座 输入部分确定 数据部分确定
==========文件名:fixed_am_7bitLI_HE10.txt测试用例:Test_Case_3 START ========
第1座 TC ID OK
第2座 输入部分确定 数据部分确定
第3组 输入部分确定 数据部分确定
第4座 输入部分确定 数据部分确定
**我需要找到Start标签之间是否存在“OK”以外的任何内容,如果是,我必须将特定块标记为失败
例如,如果我发现测试用例:Test_Case_1 START和测试用例之间没有OK:Test_Case_2 START我必须将测试用例:Test_Case_1标记为失败
已更新 这种格式的预期输出
文件名:fixed_am_7bitLI_HE10.txt测试用例:Test_Case_1状态:PASS (如果标签之间没有字符串'DIFFERS'(==)
文件名:fixed_am_7bitLI_HE10.txt测试用例:Test_Case_2状态:失败 (如果标签之间有字符串'DIFFERS'(==)
更新-2
如果测试用例失败
文件名:fixed_am_7bitLI_HE10.txt测试用例:Test_Case_2状态:FAILED
块的不同部分是:
第2区
输入部分确定
数据部分DIFFERS
答案 0 :(得分:0)
疯狂猜测:
while(<>) {print '**FAIL**' unless /TC ID OK/; print $_; }
但实际上,您应该指定您的要求。
答案 1 :(得分:0)
可能有些奇怪的事情如下:
#!/usr/bin/env perl
use strict;
use warnings;
my ($failed, $file, $test);
while (<>)
{
chomp;
next if /^$/;
if (/^=/)
{
print "$file $test Status: $failed\n" if $failed;
($file, $test) = ($_ =~ /(File Name:\s+\S+).+\b(Test Case: Test_Case_\d+)\b/);
$failed = 'PASSED';
next;
};
$failed = 'FAILED' if /\bDIFFERS\b/g;
}
print "$file $test Status: $failed\n";
$ cat testdata
========== File Name: fixed_am_7bitLI_HE10.txt Test Case: Test_Case_1 START ==========
Block 1 TC ID OK
Block 2 Input section OK data section OK
Block 3 Input section OK data section OK
Block 4 Input section OK data section OK
========== File Name: fixed_am_7bitLI_HE10.txt Test Case: Test_Case_2 START ========
Block 1 TC ID OK
Block 2 Input section OK data section DIFFERS
Block 3 Input section OK data section OK
Block 4 Input section OK data section OK
$ ./t.pl < testdata
File Name: fixed_am_7bitLI_HE10.txt Test Case: Test_Case_1 Status: PASSED
File Name: fixed_am_7bitLI_HE10.txt Test Case: Test_Case_2 Status: FAILED