鉴于
variable=1234567890
或者
variable2=12345678901234567890
我需要修改这个值,所以总有一个点是结尾的第9个字符。该值可以是任意长度的数字,但点必须始终在最后8个字符之前。
我正在尝试解析来自https://blockchain.info/rawaddr/的比特币地址余额的响应,它总是给出"final_balance":12345678901,
而不是123.45678901的值(比特币可以被8位小数整除)。
我猜这可能与sed有关,但我真的不知道。任何帮助将不胜感激。
答案 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?
$ echo "${variable2:0:-9}.${variable2: -8}"
12345678901.34567890
$ echo "${variable2:0:(${#variable2}-9)}.${variable2: -8}"
12345678901.34567890
$ echo "${variable:0:(${#variable}-9)}.${variable: -8}"
1.34567890
参数扩展可以节省您生成另一个进程的速度,因此非常快。
(旁注:冒号和第一个索引之间的空格是必要的,以区分子串表达式与负起始索引与另一种参数扩展类型:)
${parameter:-word}
使用默认值。如果参数未设置或为null,则替换单词的扩展。否则,参数的值将被替换。
答案 2 :(得分:0)
这是没有-E
echo 12345678901234567890 |sed 's/[0-9]\{8\}$/.&/'
123456789012.34567890