用 sed 添加逗号代替数字?

用 sed 添加逗号代替数字?

尝试编写一个简单的脚本来获取以太坊价格并格式化响应。

这是我尝试过的:

#!/bin/bash

response=$(curl 'https://min-api.cryptocompare.com/data/price?fsym=ETH&tsyms=GBP')
price=$(echo $response | grep -o -P '(?<=:).*(?=})')
formattedPrice=$(echo "${price%.*}" | sed 's/\([[:digit:]]\{3\}\)\([[:digit:]]\{3\}\)\([[:digit:]]\{3\}\)/\1,\2,\3/g')

echo "£$formattedPrice"

虽然它没有添加逗号。

答案1

不要尝试使用 格式化数字sed,而是考虑仅使用printf

$ price=1254.43
$ printf "%'.2f\n" $price
1,254.43

或者,如果您不需要小数部分:

$ printf "%'d\n" ${price%.*}
1,254

答案2

使用jq从 返回的 JSON 文档中提取数字curl,然后使用 GNUawk根据区域设置格式化数字en_GB.UTF-8,因为jq没有printf等效的输出过滤器:

curl -s 'https://min-api.cryptocompare.com/data/price?fsym=ETH&tsyms=GBP' |
jq -r '.GBP' |
LC_ALL=en_GB.UTF-8 gawk '{ printf "£%'\''.2f\n", $1 }'

printf由于单引号字符串中的撇号需要特殊处理,格式字符串在£%'.2f这里被破坏了一点,它将通过用逗号分隔千位来格式化值的整数部分(在给定的语言环境中)。它还会在值前添加井号 (£),并确保报告的值保留两位小数。

输出示例:

£1,262.08

相关内容