我有一个包含多行的文件,需要在" jobid"中的十六进制数字上加1。字符串:
<jobid>a3445-34729-3b34b</jobid>
我可以使用sed来过滤这一行,但是如何进行十六进制计算呢? 结果值应如下所示:
<jobid>a3445-34729-3b34c</jobid>
答案 0 :(得分:1)
要进行十六进制算术,请在数字字符串前加上“0x”。所以如果你用sed将你的数字提取到$ n
> n="0x"$n
> echo $n
0x3b34b
> n=$((n+1))
> echo $n
242748 # bash saves the result as a decimal string
> printf "%x\n" $n
0x3b43c # but you can use printf to output it in hex
答案 1 :(得分:0)
使用此script
:
#!/bin/bash
last_jobid=$(grep '<jobid>.*</jobid>' $1 | cut -d'>' -f2 | cut -d'<' -f1 | cut -d'-' -f3)
new_jobid=$((0x$last_jobid + 1))
new_jobid=$(printf "%x\n" $new_jobid)
sed -r "s|(<jobid>[^-]+-[^-]+-)[^-]+(</jobid>)|\1$new_jobid\2|" $1
运行它:
./script job.xml