Tôi có một tập tin như thế này:trận đấu trên nhiều dòng perl biểu thức chính quy
01 00 01 14 c0 00 01 10 01 00 00 16 00 00 00 64
00 00 00 65 00 00 01 07 40 00 00 22 68 61 6c 2e
6f 70 65 6e 65 74 2e 63 6f 6d 3b 30 30 30 30 30
30 30 30 32 3b 30 00 00 00 00 01 08 40 00 00 1e
68 61 6c 2e 6f 70 65 6e 65 74 2d 74 65 6c 65 63
6f 6d 2e 6c 61 6e 00 00 00 00 01 28 40 00 00 21
72 65 61 6c 6d 31 2e 6f 70 65 6e 65 74 2d 74 65
6c 65 63 6f 6d 2e 6c 61 6e 00 00 00 00 00 01 25
40 00 00 1e 68 61 6c 2e 6f 70 65 6e 65 74 2d 74
65 6c 65 63 6f 6d 2e 6c 61 6e 00 00 00 00 01 1b
40 00 00 20 72 65 61 6c 6d 2e 6f 70 65 6e 65 74
2d 74 65 6c 65 63 6f 6d 2e 6c 61 6e 00 00 01 02
40 00 00 0c 01 00 00 16 00 00 01 a0 40 00 00 0c
00 00 00 01 00 00 01 9f 40 00 00 0c 00 00 00 00
00 00 01 16 40 00 00 0c 00 00 00 00 00 00 01 bb
40 00 00 28 00 00 01 c2 40 00 00 0c 00 00 00 00
00 00 01 bc 40 00 00 13 31 39 37 37 31 31 31 32
32 33 31 00
Tôi đọc các tập tin và sau đó tìm octet nhất định và thay thế chúng bằng các thẻ:
while(<FH>){
$line =~ s/(00 00 00 64)/<incr4> /g;
$line =~ s/(00 00 00 65)/<incr4> /g;
$line =~ s/(30 30 30 30 30 32)/<incr6ascii:999999:0>/g;
$line =~ s/(31 31 32 32 33 31)/<incr6ascii:999999:0>/g;
print OUTPUT $line;
}
Vì vậy, ví dụ , 00 00 00 64
sẽ được thay thế bằng thẻ <incr4>
. Điều này đã được làm việc tốt, nhưng nó dường như không thể phù hợp trên nhiều dòng nữa. Ví dụ: mẫu 31 31 32 32 33 31
chạy trên nhiều dòng và biểu thức chính quy dường như không bắt được. Tôi đã thử sử dụng các công cụ sửa đổi mẫu/m/s để bỏ qua các dòng mới nhưng chúng không phù hợp với nó. Cách duy nhất xung quanh nó tôi có thể đưa ra, là để đọc toàn bộ tập tin vào một chuỗi bằng cách sử dụng:
undef $/;
my $whole_file = <FH>;
my $line = $whole_file;
$line =~ s/(00 00 00 64)/<incr4> /g;
$line =~ s/(00 00 00 65)/<incr4> /g;
$line =~ s/(30 30 30 30 30 32)/<incr6ascii:999999:0>/g;
$line =~ s/(31 31 32 32 33 31)/<incr6ascii:999999:0>/g;
print OUTPUT $line;
Công trình này, các thẻ được chèn chính xác, nhưng cấu trúc của tập tin được thay đổi hoàn toàn. Tất cả được đổ ra trên một dòng. Tôi muốn giữ lại cấu trúc của tập tin như nó xuất hiện ở đây. Bất kỳ ý tưởng như thế nào tôi có thể làm điều này?
/john
Tuyệt vời! Hoạt động hoàn hảo ... Tôi không bao giờ nghĩ đến việc sử dụng bản đồ băm, giải pháp khéo léo! – John
+1: Giải pháp tuyệt vời, chỉ cần đặt sửa đổi '/ x' vào cuối! – Zaid