![예상을 사용하여 정규식을 사용하여 콘텐츠를 일치시키는 방법은 무엇입니까?](https://linux55.com/image/216288/%EC%98%88%EC%83%81%EC%9D%84%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%EC%A0%95%EA%B7%9C%EC%8B%9D%EC%9D%84%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%EC%BD%98%ED%85%90%EC%B8%A0%EB%A5%BC%20%EC%9D%BC%EC%B9%98%EC%8B%9C%ED%82%A4%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
저는 정규 표현식을 처음 사용합니다. 아래 입력 스트림을 구문 분석해 보세요. 정규식으로 구문 분석하는 방법. 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";
}
}