我试图从我得到的4字节(32位)十六进制输出中只过滤一个字节(在xx -小endian之后的小字节2和3)。当我执行命令时,我得到以下输出
000023xxxx是变化的而不是固定的。
我正在尝试编写一个bash脚本,以查看我得到的输出是否与23匹配。当我使用以下内容时,它与23xx匹配,其中xx在2-3之间,但我希望只匹配xx后面的23 (小endian)。
示例
val=231a
echo $val | grep -o -E '[2-3]+' | head -1 | sed -e 's/^0\+//'
23
val=2332
echo $val | grep -o -E '[2-3]+' | head -1 | sed -e 's/^0\+//'
2332在第二个例子中,我想要一个23的输出。
发布于 2016-08-25 17:42:15
您可以单独使用bash完成这一任务;不需要其他工具。
val=231a
if [[ $val = *23?? ]]; then
echo "$val matches"
else
echo "$val doesn't match"
fi发布于 2016-08-25 18:47:36
您可以在算术展开中执行和(&)和右移(>>):
(( ((val >> 8) & 0xFF) == 0x23 )) && echo "value is 23"只是要小心括号!并将十六进制值前缀为0x。
val=0x231a该守则的意思是:
>> 8),& 0xFF),以及== 0x23)进行比较。如果结果是true,执行:echo "value is 23"。
如果该值实际上是“小endian",那么字符串0000231a中的十六进制值是:
val=0x1a230000守则将是:
(( ((val >> 16) & 0xFF) == 0x23 )) && echo "value is 23"如果val中的字符串为val=0000231a,则只需执行以下操作:
[[ val == *23?? ]] && echo "value is 23"而且,如果要从字符串中提取nibbles 2和3,请执行以下操作:
$ result=${val: -4:2}
$ echo "$result"
23或更短:
$ echo "${val: -4:2}"
23发布于 2016-08-25 18:58:37
您只需在一行中使用Bash正则表达式就可以做到这一点:
[[ $val =~ 23..$ ]] && echo matchhttps://stackoverflow.com/questions/39151329
复制相似问题