16進数とランダムな文字列を含むファイルがあります~/dummy_hex.txt
。
\x12\xA1\xF1\xE3somegibberigh
上記の文字列に16進値(\x^hex_digit^^hex_digit^グループ)がいくつあるかカウントしてみたいです。上記の例では、numberを返すコマンドを実行したいと思います4
。
つまり、端末に次のように入力したいと思います。
command ^file_having hex^
値4を返します。
これまで私はこれを試しました:
sed 's/[^\x[0-9A-Fa-f][0-9A-Fa-f]]//g' dummy_hex.txt | awk '{ print length }'
しかし、どういうわけか間違った正規表現型のために間違った結果を返すようです。 sedで完全なPCRE互換正規表現を使用してこれを行う方法を教えてください。
または、私の文字列に含まれている16進数値がいくつかあるかを計算したいと思います。
編集1
代替方法は、\x
文字列の発生回数を数えることですが、この方法では、\x
16進数の文字列を表さない可能性がある背後にある偽の値を計算する可能性が高くなります。
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、文字 31: 終了していない 's' コマンド
ベストアンサー1
grep
拡張正規表現と-o
オプションのサポートを使用します。
grep -Eo '\\x[[:xdigit:]]{2}' input | wc -l
次の要件を満たすにはcommand filename
:
function counthex() {
grep -Eo '\\x[[:xdigit:]]{2}' "$1" | wc -l
}
ように:
counthex input