如何使用正则表达式通过使用expect来匹配内容?

如何使用正则表达式通过使用expect来匹配内容?

我对使用正则表达式很陌生。尝试解析下面的输入流。如何用正则表达式解析它。由于 CNTXID 是递增的。

"Data"
                  CNTXID = 1
                      AP = 99
                     DEF = FALSE
               
                  CNTXID = 2
                      AP = 88
                     DEF = TRUE
               
                  CNTXID = 3
                      AP = 77
                     DEF = FALSE

并且 CNTXID 未修复。

所需输出

CNTXID_1 = 1
    AP_1 = 99
   DEF_1 = FALSE

CNTXID_2 = 2
    AP_2 = 88
   DEF_2 = TRUE

CNTXID_3 = 3
    AP_3 = 77
   DEF_3 = FALSE

答案1

expect不应该用于修改数据。它是为“收到消息 - 发送响应”而设计的。您所描述的只是数据重新格式化。

使用 Perl 可以轻松完成:

#!/bin/perl
my $n=0;
while(<>) {
    if (/CNTXID = (\d+)/) {
        $n = $1;
    }
    if (/(\S+) = (\S+)/) {
        printf "%7s_%d = %s\n", $1, $n, $2;
    } elsif (/$\s*^/) {
        print "\n";
    }
}

相关内容