bash - 添加。文件末尾的一定数量的字符

时间:2014-01-20 23:23:30

标签: regex bash

鉴于

variable=1234567890

或者

variable2=12345678901234567890

我需要修改这个值,所以总有一个点是结尾的第9个字符。该值可以是任意长度的数字,但点必须始终在最后8个字符之前。

我正在尝试解析来自https://blockchain.info/rawaddr/的比特币地址余额的响应,它总是给出"final_balance":12345678901,而不是123.45678901的值(比特币可以被8位小数整除)。

我猜这可能与sed有关,但我真的不知道。任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:3)

为此,您可以使用此sed

sed -E "s/[0-9]{8}$/.&/"

它捕获最后8位数字并用前导点打印回来。

样品

$ sed -E "s/[0-9]{8}$/.&/" <<< "$v"
123456789012.34567890

$ v="1234567890"
$ sed -E "s/[0-9]{8}$/.&/" <<< "$v"
12.34567890

答案 1 :(得分:0)

如何使用parameter substring expansion

Bash 4

$ echo "${variable2:0:-9}.${variable2: -8}"
12345678901.34567890

Bash 3

$ echo "${variable2:0:(${#variable2}-9)}.${variable2: -8}"
12345678901.34567890
$ echo "${variable:0:(${#variable}-9)}.${variable: -8}"
1.34567890

参数扩展可以节省您生成另一个进程的速度,因此非常快。

(旁注:冒号和第一个索引之间的空格是必要的,以区分子串表达式与负起始索引与另一种参数扩展类型:)

  

${parameter:-word}   使用默认值。如果参数未设置或为null,则替换单词的扩展。否则,参数的值将被替换。

答案 2 :(得分:0)

这是没有-E

的sed命令
echo 12345678901234567890 |sed 's/[0-9]\{8\}$/.&/'

123456789012.34567890