如何使用bash更新文件中的值?

时间:2015-02-03 09:01:33

标签: bash shell sed

我有一个包含多行的文件,需要在" jobid"中的十六进制数字上加1。字符串:

<jobid>a3445-34729-3b34b</jobid>

我可以使用sed来过滤这一行,但是如何进行十六进制计算呢? 结果值应如下所示:

<jobid>a3445-34729-3b34c</jobid>

2 个答案:

答案 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