我对使用正则表达式很陌生。尝试解析下面的输入流。如何用正则表达式解析它。由于 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";
}
}