Regex 如何在Vim(或其他地方)中使用正则表达式搜索十六进制转储?

Regex 如何在Vim(或其他地方)中使用正则表达式搜索十六进制转储?,regex,search,vim,binary,hex,Regex,Search,Vim,Binary,Hex,我正在寻找一种方法,在二进制文件的十六进制转储中搜索一系列十六进制数字的文本表示形式,如下所示: 0x000001A0:36 5B 09 76 99 31 55 09 78 99 34 51 49 BF E0 03 0x000001B0:28 0B 0A 03 0B E0 07 28 0B 0A 03 0B 49 58 09 35 问题是模式可能会滚动到下一行。例如,在上面两行中,我无法立即搜索03280b,因为它跨越两行 最近的帖子告诉我,regex是一个不错的选择,但我不熟悉它,也不知道该

我正在寻找一种方法,在二进制文件的十六进制转储中搜索一系列十六进制数字的文本表示形式,如下所示:

0x000001A0:36 5B 09 76 99 31 55 09 78 99 34 51 49 BF E0 03
0x000001B0:28 0B 0A 03 0B E0 07 28 0B 0A 03 0B 49 58 09 35
问题是模式可能会滚动到下一行。例如,在上面两行中,我无法立即搜索
03280b
,因为它跨越两行

最近的帖子告诉我,regex是一个不错的选择,但我不熟悉它,也不知道该用什么:Notepad++、Vim、Word或其他任何东西

编辑1:显示上述内容的文本文件是从二进制文件派生的,我可以使用Notepad++


编辑2:举个例子,假设我正在尽可能接近11:45:00(军事时间)<代码>03 28 0B 0A 03 0B分散在上面两行,可以理解为“2011年3月10日3秒40分钟11小时”。我正在寻找一种方法来浏览此文件,以了解我能接近11:45:00的距离。

似乎没有任何更优雅的解决方案对您有效,因此:

\v03(\n[^:]+:)? 28(\n[^:]+:)? 0B(\n[^:]+:)?
是的,它是复制粘贴和超级野蛮的福西,但如果我能让他妈的回溯工作,它看起来会好得多

只需键入“/”,然后复制该模式,然后按enter键,将03 28 0B替换为所需的内容,后跟空格、新值,然后是插入语句。有大约100%的可能性有更好的东西,但我想不出来

这也将匹配内存位置,但如果您只想看一眼,这应该无关紧要


编辑:忘记\v

您可以使用内置十六进制编辑器和十六进制搜索的。只需打开原始二进制文件,切换到十六进制编辑器并搜索您的序列。

让我提出以下采用大量十六进制数字的映射 从用户输入或视觉选择中,创建适当的图案,然后 开始搜索它

nnoremap x/SearchHexBytes('/',0)
nNOREX地图?SearchHexBytes(“?”,0)
vnoremap x/:调用SearchHexBytes(“/”,1)/
vnoremap x?:调用SearchHexBytes(“?”,1)?
功能!SearchHexBytes(dir,vis)
如果a:vis
让[qr,qt]=[getreg(“”),getregtype(““”)]
标准gvy
让我们=@“
调用setreg(“”,qr,qt)
其他的
调用inputsave()
设s=input(a:dir)
调用inputrestore()
恩迪夫
如果s=~“[^\t0-9A-Fa-f]”
echohl错误| echomsg“无效十六进制数字”| echohl无
返回
恩迪夫
让@/=join(拆分,“\s\+”,“\%(\s*\\\124; \ n0x\x\+:\s*\))
返回a:dir。“\r”
端功能

您能解释一下“文本”文件是什么意思吗?它是文本文件还是二进制文件?你会用记事本++还是不会?或者你只需要使用vim?@Andrey Admovich我真的可以使用任何东西。只需要能够查看它,并在特定的区域value@mwcz文本文件与.txt文件相同,但它是从二进制文件派生的。您在这里试图完成的实际任务是什么?安德烈·阿达莫维奇:唯一的问题是我需要知道我在哪里。我一直在查找文本文件的原因是,它有我需要搜索的标题,但十六进制编辑器会显示文件的偏移量,以及在同一编辑器视图中二进制数据的文本表示。您还可以在同一搜索窗口中搜索文本。首先找到你的标题作为文本,然后找到你的二进制序列它不会找到我的序列,只要在control+f框中设置它。程序底部的十六进制编辑器,你是否打开了二进制文件或该文件的文本重传?