Text-Processing

查找包含十六進制和隨機字元串的字元串有多少十六進制值

  • December 29, 2017

我有~/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),為每個匹配增加一個計數器,然後列印該計數。

引用自:https://unix.stackexchange.com/questions/413712