【问题标题】:Insert comma into string at the place you want在您想要的位置将逗号插入字符串
【发布时间】:2021-07-25 00:42:05
【问题描述】:

我正在尝试从该字符串中提取余额(我已经这样做了)并在字符串中添加一个逗号,例如 6841,12691421(也已经这样做了)但是!像我那样做有问题。

{
    "address": "NKNXyCmatuYuAnMFufdDnLL82qmvgB4uAYt6",
    "count_transactions": 59606,
    "first_transaction": "2020-08-07 17:25:51",
    "last_transaction": "2021-05-02 09:09:24",
    "balance": 684112691421,
    "name": []
}

我用(请原谅菜鸟代码)做到了:

sed -n -r 's/(^.*balance":)([^"]+)".*/\2/p' | sed -e 's/[",]//g' | sed 's/./&,/4'

问题:

sed 's/./&,/4' 是一个静态的东西。当余额减少一个字符时,输出错误,例如`68411269142,余额应为684,11269142。

我需要一个解决方案来计算 comm`a 插入位置从右侧开始,8 个字符。

【问题讨论】:

    标签: json regex linux sed


    【解决方案1】:

    两个 jq-only 解决方案:

    a) 没有任何正则表达式开销:

    jq -r '.balance | tostring | .[:-8]+ ","+ .[-8:]'
    

    b) 使用正则表达式:

    jq -r 'tostring|sub("(?<tail>[0-9]{8}$)"; ",\(.tail)" )'
    

    警告

    不幸的是,这些仅限 jq 的解决方案仅适用于少于 16 位的整数,除非您拥有足够新的 jq 版本(1.6 之后)。

    【讨论】:

      【解决方案2】:

      你可以用这个sed:

      sed -E 's/(^.*balance":)([^",]+).*/\2/; s/[0-9]{8}$/,&/' file
      
      6841,12691421
      
      • s/[0-9]{8}$/,&amp;/ 匹配 8 个尾随数字并在其前插入一个逗号

      【讨论】:

        【解决方案3】:

        使用jqsed

        jq '.balance' file.json | sed -E 's/.{8}$/,&/'
        

        输出:

        6841,12691421

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2010-10-17
          • 2012-10-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多