Text-Processing
查找包含十六進制和隨機字元串的字元串有多少十六進制值
我有
~/dummy_hex.txt
包含十六進制和隨機字元串的文件:\x12\xA1\xF1\xE3somegibberigh
我想計算上面的字元串有多少個十六進制值(\x^hex_digit^^hex_digit^ 組)。在上面的範例中,我希望執行命令以返回數字
4
。換句話說,我想在我的終端上輸入:
command ^file_having hex^
並返回值 4
到目前為止,我嘗試通過以下方式做到這一點:
sed 's/[^\x[0-9A-Fa-f][0-9A-Fa-f]]//g' dummy_hex.txt | awk '{ print length }'
但是由於正則表達式錯誤類型,似乎以某種方式返回了錯誤的結果。你能告訴我如何使用完整的 PCRE 兼容正則表達式和 sed 來做到這一點嗎?
或者,我想計算我的字元串包含多少個十六進制值。
編輯 1
另一種方法是計算
\x
字元串的出現次數,但這可能會計算任何\x
可能沒有跟隨指示十六進製字元串的值的雜散。sed 's/[^\x]//g' dummy_hex.txt | awk '{ print length }'
此外,我嘗試使用
-r
啟用 PCRE 的選項來做到這一點:sed -r 's/^\\x[0-9A-Fa-f][0-9A-Fa-f]]/g' dummy_hex.txt | awk '{ print length }'
但我得到了錯誤:
sed: -e 表達式 #1, char 31: 未終止的 `s’ 命令
使用
grep
支持擴展正則表達式的選項和-o
選項:grep -Eo '\\x[[:xdigit:]]{2}' input | wc -l
為了滿足以下要求
command filename
:function counthex() { grep -Eo '\\x[[:xdigit:]]{2}' "$1" | wc -l }
作為:
counthex input
$ cat input bla\x12\xA1\xF1 \xE3bla $ perl -nle '$c++ while m/\\x[[:xdigit:]]/g; END { print $c }' input 4 $
基本上循環而不列印輸入(
perldoc perlrun
),為每個匹配增加一個計數器,然後列印該計數。