0

我正在这样做:

#!/usr/bin/env/perl

open FILE1, "<Exed.exe";
open FILE2, ">Fileinhexadecimal.txt";

binmode FILE1;

while (<FILE1>) {
$lines = $_;
$lines = unpack("H*", $lines);
chomp $lines;
print FILE2 "$lines\n";
}

close (FILE1);
close (FILE2)
print "Finish\n";
<>;

之后,我创建了其他程序来读取这个“.txt”文件来搜索一些信息。

使用此脚本,我正在创建一个包含 .exe 文件的十六进制数据的文本文件。我的大问题是:

1-我想用正则表达式提取行:(/8B55-(.*)-8B55/使用第二个脚本,这里没有发布)

2 - 这是问题:

曾经我的 file.txt 是这样的:

8B55-646464-8B558B55-636363-8B55
8B55-656565-8B558B55-666666-8B55

当我运行脚本时,脚本只会弹出这些数据:

"646464", "656565".

你还是不明白我的问题。我想提取:646464, 636363, 656565, 666666。但是脚本,当它找到第一个匹配项时,他会跳到下一行,不要阅读其余部分。

你能帮忙我怎么能抓住所有的比赛吗?其他例子:

8B55-646464-8B55987941651968798779878B55-686868-8B55
8B55-ILOVEYOU-8B55

在这里,脚本只会捕获646464and ILOVEYOU。(缺少 686868):/

我正在搜索一些数据的真实文件非常大并且有一些行,比这个例子大。

我尝试使用“g”: if ($lines =~ /(.*)/g) {

但不起作用。

我的第二个脚本:

我正在尝试运行此脚本:

#!/usr/bin/perl


open FILE, "<Fileinhexadecimal.txt";

while (<FILE>) {
$lines = $_;
if ($lines =~ /8B55-(.*)-8B55/g) {
print "-$1\n";
}
}
close (FILE)

<>;

什么也没有发生。我正在尝试从一个巨大的文件中提取某些连续的单词,并且正在发生这种情况,我只是以 8B55 为例。但问题是一样的。新想法?我怎么能使用你的代码?

@match = /8B55-(.*?)-8B55/g; 打印“@match\n”;

???感谢您的回复,抱歉英语不好

真正的问题

该行是:

8BCEE84EC4FFFF6A016A2B6A2B686C0100008BCEE83CC4FFFF6A016A2B6A2B686C0100008BCEE82AC4FFFF6A016A0E6A0E686D0100008BCEE818C4FFFF6A016A146A1468F20100008BCEE806C4FFFF6A006A0E6A0E68700100008BCEE8F4C3FFFF6A016A1E6A1E6871010000

在这一行中,我有 6 个数据要提取。

我使用这个正则表达式来提取:

8BCEE8....FFFF6A(..)6A(..)6A(..)68(..)(..)0000

在第一行,我们有 3 个匹配项,在第二个我们有 2 个匹配项,最后一行我们有 1 个匹配项 (8BCEE8F4C3FFFF6A016A1E6A1E6871010000)

实际上,我想提取 \1 \2 \3 \4 和 \5。我尝试使用 if :

if ($lines =~ /8BCEE8....FFFF6A(..)6A(..)6A(..)68(..)(..)0000/g) { print "$5$4 $1$2$3" }

但是有了这段代码,我每行只能匹配一个。并不是所有的比赛。明白了吗?:/我想在这里提取,例如:

8BCEE84EC4FFFF6A016A2B6A2B686C010000

我想提取 6A 之后的单词,6A 之后,6A 之后和 68 之后的 4 个字母。:/ \o/ 感谢您的建议,iluv u!

在这个文件中,有 1000 行具有相同的正则表达式。我想提取这 1000 行。

4

1 回答 1

1

这有帮助吗?

while (<DATA>) {
  print $1, "\n" while /(?<=8B55-)(\w+)(?=-8B55)/g;
}

__DATA__
8B55-646464-8B558B55-636363-8B55
8B55-656565-8B558B55-666666-8B55
8B55-646464-8B55987941651968798779878B55-686868-8B55
8B55-ILOVEYOU-8B55

输出

646464
636363
656565
666666
646464
686868
ILOVEYOU

更新

这就是我认为您对完整问题所需要的。

while (<DATA>) {

  while (/8BCEE8....FFFF6A(..)6A(..)6A(..)68(..)(..)0000/g) {
    print join(' ', $1, $2, $3, $4, $5), "\n";
  }
}

__DATA__
8BCEE84EC4FFFF6A016A2B6A2B686C0100008BCEE83CC4FFFF6A016A2B6A2B686C0100008BCEE82AC4FFFF6A016A0E6A0E686D0100008BCEE818C4FFFF6A016A146A1468F20100008BCEE806C4FFFF6A006A0E6A0E68700100008BCEE8F4C3FFFF6A016A1E6A1E6871010000

输出

01 2B 2B 6C 01
01 2B 2B 6C 01
01 0E 0E 6D 01
01 14 14 F2 01
00 0E 0E 70 01
01 1E 1E 71 01
于 2013-04-05T01:05:13.653 回答