있다면 다음과 같이 말해주세요:
blah;PC=1234abcd
PC=4444bbcd;blah
PC=0000abcd;;foo
PC=1234abff
PC 값이 주어진 범위 (예: ) grep
내에 있는 행을 어떻게 처리할 수 있습니까 ?1234ab00
1234b0ff
범위 -
옵션은 일반 순서에서만 작동하는 것으로 보이며 0-9a-A
16진수 범위에서는 작동하지 않습니다.
답변1
grep -f <(printf "%x\n" $(seq -f "%.f" $(printf "%d %d" 0x1234ab00 0x1234b0ff))) file
printf
두 개의 16진수 값 중 10진수 값을 내부적으로 인쇄합니다.- 그런 다음
seq
그 사이의 모든 것을 십진수로 인쇄하십시오. printf
이러한 모든 10진수 값의 16진수 값을 외부적으로 인쇄합니다.- 마지막 검색
grep -f
에서 이러한 패턴이 모두 나타납니다file
.
산출:
blah;PC=1234abcd
PC=1234abff
답변2
나는 다음을 사용할 것이다 perl
:
perl -ne 'print if /PC=([\da-fA-F]+)/ &&
($n=hex $1) >= 0x1234ab00 &&
$n <= 0x1234b0ff'
를 사용하면 grep
매우 번거로울 수 있으며 다음과 같이 각 범위에 대한 정규식을 조정해야 합니다.
LC_ALL=C grep -E 'PC=0*1234([aA][b-fB-F]|[bB]0)[0-9a-fA-F]{2}([^0-9a-fA-F]|$)'
대괄호 표현식 내의 범위는 문자에만 적용됩니다. 대괄호 표현식은 하나만 일치합니다.특징(좋아요, 요소를 정리하세요). C 로케일에서는 [0-9]
의 약어 [0123456789]
이므로 10개의 아라비아 숫자 문자와 일치합니다. [0-25]
이는 [0125]
0, 1, 2, 5 중 하나와 일치합니다.