Text-Processing
如何使用 grep 返回給定範圍內具有十六進制數字的行?
如果我有,請說:
blah;PC=1234abcd PC=4444bbcd;blah PC=0000abcd;;foo PC=1234abff
我如何獲取給
grep
定範圍內 PC 值的行,例如.1234ab00``1234b0ff
-
range 選項似乎只適用於顯然不適用於十六進制範圍的正常順序0-9a-A
。
grep -f <(printf "%x\n" $(seq -f "%.f" $(printf "%d %d" 0x1234ab00 0x1234b0ff))) file
- 內部
printf
列印兩個十六進制值的十進制值。- 然後
seq
以十進制列印它們之間的所有內容。- 外部
printf
列印所有這些十進制值的十六進制值。- 最後
grep -f
在file
.輸出:
blah;PC=1234abcd PC=1234abff
我會
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]
is[0125]
so 匹配 0、1、2、5 中的任何一個。