我有~/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
选项:为了满足以下要求
command filename
:作为:
如果您计算没有十六进制的字符:
并从整个文件数中减去:
您可以获得十六进制字符的计数(乘以 4)。在一个脚本中:
印刷:
请记住 wc 计算字节数(不是依赖于语言环境的字符)。
基本上循环而不打印输入(
perldoc perlrun
),为每个匹配增加一个计数器,然后打印该计数。另一种解决方案是使用已安装的 perl 来执行此操作:
如果您不想编写脚本(例如,在包含要执行的命令的指令表上),这提供了一个快速简便的单行器。