我有一个文本文件如下。 我需要找到关键字"(数字)测试从(数字)测试用例运行"并存储号码。 在下面的例子中,数字是67。 其次,我需要找到" PASSED"关键字,然后是"(数字)测试"。 在下面的例子中,它是67次测试。我该怎么做。
坦克, 沙拉斯
< 0x00000: 5b 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 5d 20 31 34 20 [----------] 14
< 0x00010: 74 65 73 74 73 20 66 72 6f 6d 20 44 49 53 41 42 tests from DISAB
< 0x00020: 4c 45 44 5f 47 65 6e 65 72 69 63 44 52 4d 54 65 LED_GenericDRMTe
< 0x00030: 73 74 20 28 31 32 38 34 39 20 6d 73 20 74 6f 74 st (12849 ms tot
< 0x00040: 61 6c 29 0d 0a 0d 0a 5b 2d 2d 2d 2d 2d 2d 2d 2d al)....[--------
< 0x00050: 2d 2d 5d 20 47 6c 6f 62 61 6c 20 74 65 73 74 20 --] Global test
< 0x00060: 65 6e 76 69 72 6f 6e 6d 65 6e 74 20 74 65 61 72 environment tear
< 0x00070: 2d 64 6f 77 6e 0d 0a 5b 3d 3d 3d 3d 3d 3d 3d 3d -down..[========
< 0x00080: 3d 3d 5d 20 36 37 20 74 65 73 74 73 20 66 72 6f ==] 67 tests fro
< 0x00090: 6d 20 34 20 74 65 73 74 20 63 61 73 65 73 20 72 m 4 test cases r
< 0x000a0: 61 6e 2e 20 28 34 33 38 32 33 20 6d 73 20 74 6f an. (43823 ms to
< 0x000b0: 74 61 6c 29 0d 0a 5b 20 20 50 41 53 53 45 44 20 tal)..[ PASSED
< 0x000c0: 20 5d 20 36 37 20 74 65 73 74 73 2e 0d 0a ] 67 tests...
我尝试了以下代码,但它不匹配:
open (FILE, '<', 'board_dumplog.log')
or die "Could not open board_dumplog.log: $!";
while (<FILE>) {
#print $_ if (/^[==========]/ .. /^tests.../);
if (/^[==========]/ .. /^tests.../) {
print "Line Found:".$_."\n";
}
}
close (FILE)
or die "Could not close board_dumplog.log: $!";
我尝试用下面的一次拍摄,但没有运气。
open (FILE, '<', '123.log') or die "Could not 123.log: $!";
my $i=0;
while (<FILE>) {
#print $_ if (/^[==========]/ .. /^tests./);
if (/^[0-9] tests from [0-9] test cases ran/ .. /^[0-9] tests\./){
print "$i.Match Found:".$_."\n";
$i++;
}
}
任何帮助?
答案 0 :(得分:0)
你需要正确地转义特殊字符,或者你应该在regexp中使用/ Q / E修饰符来匹配。
if (/^\[[\=]+\]\s*(\d+)\s*tests/i) {
print "found $1 tests in line: $_\n";
答案 1 :(得分:0)
如果要匹配正则表达式中的文字字符串,则需要转义正则表达式特殊字符。
您应该了解这些特殊字符是什么,但如果您想要快捷方式,则可以使用quotemeta
或\Q...\E
。
if (/^\Q[==========]\E/ .. /^\Qtests...\E/) {
括号[]
将不再被视为字符类,句点.
将不再是任何字符。