2013-10-01 3 views
2

grep 정규 표현식에 몇 가지 문제가 있습니다. 거기에 수많은 제외grep 정규 표현식이 제로와 정확히 일치하지 않습니다.

grep -E "01[a-f0-9]{2}81[a-f0-9]0" log.log 

파일의 일치의 대부분은, 좋아 보이는 : 나는 문자가 다음과 같이

내 그렙 문이 모두 소문자 일부 아스키 코드 16 진수 데이터를 grep을 위해 노력하고있어 다음과 같은 일치 :

010481ec070000 
01b481ec070000 
01508129070521 

이 문자열이 일치하는 이유는 무엇인지 알 수 없습니다. 81은 16 진수 다음에 0이 와야하기 때문에 일치하지 않아야합니다.

나는 더 조사를했습니다. 나는이 세 문자열을 별도의 파일에 배치하고 grep에 해당 파일을 배치합니다. 나는 성냥을 얻지 못한다. 여기서 무슨 일이 일어나고 있는지 잘 모르겠습니다.

이것은 grep 2.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 
+0

은 이전 grep 버전처럼 보입니다! – iamauser

+0

여기에 입력 한 내용 (3 줄)과 일치하는 grep 명령이 없습니다. grep ver'gnu grep 2.14' – Kent

+3

뭔가 이상합니다. 결과를 재현 할 수 없으며 정규 표현식은 버그가 거의 발생하지 않을만큼 간단합니다. 실행중인 정규 표현식과 전체 입력 행성을 보여주고 있습니까? 당신이 보여주지 않은 라인의 다른 부분과 일치 할 수 있습니까? 당신은 라인의 시작이나 끝을 앵커하지 않습니다 ... –

답변

0

환경 변수 LC_ALL=C 그것을 실행하려고 보낸 후 일치합니다. 로케일은 grep이 문자 범위를 해석하는 방식에 영향을줍니다.

0

당신이 말한 것과 정확히 일치한다고 가정하면 ... grep이 인수를 얻기 전에 따옴표가 맞고 파일명 glob가 없으며 0 대신에 {0}이 (가) 없습니다.

-a (이진 파일을 텍스트로 처리)가 범인인지 궁금합니다. 이진 출력은 터미널에 의해 처리 될 수 있습니다. (색상을 바꾸거나 위치 지정 또는 기타 등등을 저지르는 방법입니다.)

줄의 일부가 지워진 이진 파일을 가지고 있다면 어떻게 될까요? 말 어떻게됩니까 제어-H의 ...

만약 당신이 파이프 OD -c 통해 그렙 출력 (혹은 OD -a 또는 OD -ta당신이있는 경우) .

출력을 파일에 저장하면 grep을 사용하여 한 줄만 꺼내고 od로 보시겠습니까?

관련 문제