我正是这样做的:
#!/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-我想用regexp提取行:/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
此处,脚本只会捕获646464
和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”;
???感谢resp,对不起的英语感到抱歉
真正的问题该行是:
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) { 打印“$ 5 $ 4 $ 1 $ 2 $ 3” }
但是使用这段代码,我每行只能进行一场比赛。而不是所有的比赛。明白了吗? :/ 我想在这里提取一下:
8BCEE84EC4FFFF6A016A2B6A2B686C010000
我想在6A之后,6A之后,6A之后和68之后的4个字母之后提取单词。:/ \ o /感谢您的建议,iluv u!
在此文件中,有1000行具有相同的正则表达式。我想提取这1000行。
答案 0 :(得分: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