检查数字是否为十六进制格式并将其转换为十进制

时间:2015-10-12 09:47:58

标签: shell

我在Ubuntu中使用以下行运行shell脚本,从文本行中提取数字,如下所示。它是一个xml文件,我在该字段中寻找一个数字" show"。问题是字段中的数字"显示"在xml文件中有时以十六进制形式给出,有时也以十进制形式给出。我的问题是如何修改脚本行以检查nr是否为十六进制格式并将其转换为十进制?我希望结果始终为十进制,无论字段中的数字是什么格式" show" in.Ideally在一行如果可能。

cellid=`cat /tmp/cellid.txt |awk -F"show=" '{print $2}'| cut -d"\"" -f2|cut -d"(" -f3| sed 's/)//g'

<field name="gsm_a.lac" showname="Location Area Code (LAC): 0xe54c (58700)" size="2" pos="66" show="0x0000e54c" value="e54c"/>

1 个答案:

答案 0 :(得分:0)

我建议您使用xmllint来解析awk,而不是撰写regexxml

要在ununtu上安装:

 sudo apt-get install libxml2-utils

要将十六进制或十进制转换为十进制,请在bash中使用$(())

<强>样本

lo@ubuntu:~$ cat xx.xml
<field name="gsm_a.lac" showname="Location Area Code (LAC): 0xe54c (58700)" size="2" pos="66" show="0x0000e54c" value="e54c"/>
lo@ubuntu:~$ id=$(($(xmllint --xpath '//field/@show' xx.xml| grep -Po '".*"?' | tr -d \")))
lo@ubuntu:~$ echo $id
58700

lo@ubuntu:~$ echo $((0x11))
17
lo@ubuntu:~$ echo $((11))
11
lo@ubuntu:~$ echo $((011))
9