我在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"/>
答案 0 :(得分:0)
我建议您使用xmllint来解析awk
,而不是撰写regex
和xml
。
要在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