Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex grep正则表达式与零不正确匹配_Regex_Linux_Grep - Fatal编程技术网

Regex grep正则表达式与零不正确匹配

Regex grep正则表达式与零不正确匹配,regex,linux,grep,Regex,Linux,Grep,我对grep正则表达式有一些问题。我正在尝试grep一些ascii编码的十六进制数据,其中的字符都是小写的 我的grep声明如下: grep -E "01[a-f0-9]{2}81[a-f0-9]0" log.log 文件中的大多数匹配看起来都正常,但有许多匹配如下 010481ec070000 01b481ec070000 01508129070521 我不明白为什么这些字符串匹配。它们不应该匹配,因为81后面必须跟一个十六进制字符,然后是零 我做了进一步的调查。如果我将这三个字符串放在一

我对grep正则表达式有一些问题。我正在尝试grep一些ascii编码的十六进制数据,其中的字符都是小写的

我的grep声明如下:

grep -E "01[a-f0-9]{2}81[a-f0-9]0" log.log
文件中的大多数匹配看起来都正常,但有许多匹配如下

010481ec070000
01b481ec070000
01508129070521
我不明白为什么这些字符串匹配。它们不应该匹配,因为81后面必须跟一个十六进制字符,然后是零


我做了进一步的调查。如果我将这三个字符串放在一个单独的文件中,并grep该文件。我没有火柴。不太清楚这里发生了什么

这是grep2.12

这是文件中的部分原始数据。这些都是匹配的行。导出LC_ALL=C后仍然匹配

input data : 011a81a907000b3002004070eaa3d2240fa81272011763dd0040002001
input data : 010481e1070000
input data : 010481ea070000
input data : 011a81a207000b980f0040681f2b11d2f60202dc003669ba0140006100
input data : 014681ab07002140010040d2e457f8c00494ed5e014362bf0240006101ae0500404ee311f402feb2165401c562450240005801db08044068f09ff6a6005af953008062470640004d01
input data : 010481e3070000
input data : 013081ac070016c0000040f6d963fcb4f7e8127c0103637b0140006f01bf0200408ae344fdd2043eed72018362a30240006f01
input data : 010481e4070000
input data : 011a81ad07000b5c06006064f96804901154fed2008e66ff0f4000a401
input data : 010481e5070000
input data : 014681ae070021170d004069f196134cf6a805b4000769b6034000be014e0e004092e80820da0b82fbfa000c6c5c014000bf01880a004020d9ce21f4efd40954011469a1004000ae01
input data : 011a81a607000bef0d0060d60dd6edf8f18e104e015b63d3014000da00
input data : 011a81af07000b4c0800401cfbb0184a0c28f7fa00516931024000e101
input data : 015c81a007002c12050020f2ff640028007afd00801205f70540000400280c00404f016a0a10fbd0012a00e769ff0f400018005d020040e3fabd21e00830f4d200c769d80140000300030a004042030

尝试使用环境变量
LC_ALL=C
执行它。区域设置会影响grep解释字符范围的方式。

假设命令与您所说的完全一致。。。引号是对的,grep获取参数之前没有文件名glob,没有{0}而不是0,等等

我想知道-a(将二进制文件视为文本)是否是罪魁祸首。终端可以处理二进制输出。(这就是我们如何改变颜色或做诅咒定位之类的事情。)

如果你有二进制文件在里面,删除了行的一部分呢?说控制-H的

如果您通过od-c(或者od-a或者od-ta(如果您有)来传输grep输出,会发生什么情况


如果将输出存储在一个文件中,用grep拉出一行,用od查看,会发生什么情况?

看起来像是一个较旧的grep版本!在这里,grep命令找不到与输入(3行)匹配的内容。grep ver
gnu grep 2.14
有些可疑。我也无法复制您的结果,而且正则表达式非常简单,不太可能出现错误。您确定要向我们显示正在执行的正则表达式以及整个输入行吗?它可能与你没有展示的线路的其他部分相匹配吗?你们并没有锚定到线路的起点或终点……我已经做了一些进一步的调查。如果我将这三个字符串放在一个单独的文件中,并grep该文件。我没有火柴。不太确定这里发生了什么。显示整个输入行,而不仅仅是您希望匹配的字符串。