![用 sed 添加逗号代替数字?](https://linux22.com/image/208589/%E7%94%A8%20sed%20%E6%B7%BB%E5%8A%A0%E9%80%97%E5%8F%B7%E4%BB%A3%E6%9B%BF%E6%95%B0%E5%AD%97%EF%BC%9F.png)
尝试编写一个简单的脚本来获取以太坊价格并格式化响应。
这是我尝试过的:
#!/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