Chinaunix

标题: 字符处理 [打印本页]

作者: dstnow    时间: 2020-03-02 09:06
标题: 字符处理

{"Status":200,"Msg":"成功","Data":[{"TELCODE":"27","SKEY":"618aac13f9d7d751","PN":"791496908"},{"TELCODE":"27","SKEY":"ee29857654d0c8d8","PN":"791898777"},{"TELCODE":"27","SKEY":"6eeba009e8cc2b8d","PN":"714508857"}]}

其中PN和SKEY可能有多个 这里面是三个
需要换完成
PN|http://=SKEY 这种格式
比如
791496908|http://=618aac13f9d7d751
791898777|http://=ee29857654d0c8d8
714508857|http://=6eeba009e8cc2b8d
作者: legs    时间: 2020-03-02 14:23
perl -nE'say"$2|http://=$1" while/SKEY":"([^"]+)","PN":"((?1))/g' file
作者: legs    时间: 2020-03-02 14:25
你可以考虑JSON命令jq之类的处理,给你的是用捕获组,不费脑子
perl -nE'say"$2|http://=$1" while/SKEY":"([^"]+)","PN":"((?1))/g' file
作者: legs    时间: 2020-03-02 14:25
你可以考虑JSON命令jq之类的处理,给你的是用捕获组,不费脑子
perl -nE'say"$2|http://=$1" while/SKEY":"([^"]+)","PN":"((?1))/g' file
作者: legs    时间: 2020-03-02 14:25
你可以考虑JSON命令jq之类的处理,给你的是用捕获组,不费脑子
perl -nE'say"$2|http://=$1" while/SKEY":"([^"]+)","PN":"((?1))/g' file
作者: legs    时间: 2020-03-02 14:26
你可以考虑JSON命令jq之类的处理,给你的是用捕获组,不费脑子
perl -nE'say"$2|http://=$1" while/SKEY":"([^"]+)","PN":"((?1))/g' file
作者: legs    时间: 2020-03-02 15:42
perl -nE'say"$2|http://=$1" while/SKEY":"([^"]+)","PN":"((?1))/g'
作者: legs    时间: 2020-03-02 16:44
perl -nE'say"$2|http://=$1" while/SKEY":"([^"]+)","PN":"((?1))/g' file
作者: chengchow    时间: 2020-03-02 16:58
json格式

当成字典去处理就可以了

作者: Looiml    时间: 2020-03-02 18:23
awk -F'[][{}":,]+' '{for(i=1;i<=NF;i++)if($i=="SKEY")print $(i+3)"|http://="$(i+1)}' a
791496908|http://=618aac13f9d7d751
791898777|http://=ee29857654d0c8d8
714508857|http://=6eeba009e8cc2b8d
作者: dstnow    时间: 2020-03-02 20:48
回复 10# Looiml

大神厉害 一直没搞明白 双重循环
作者: cfwyy    时间: 2020-03-03 10:20
可以试试专门针对 json的命令行工具 jq,   我也是现学的
  1. jq -r 'foreach .Data[] as $i ("";$i.PN+"http://="+$i.SKEY;.)' json.txt
复制代码

作者: legs    时间: 2020-03-03 14:21
昨天回了五次都不让回复,你jq或者直接可以替换类的,Perl,sed
perl -nE'say"$2|http://=$1" while/SKEY":"([^"]+)","PN":"((?1))/g' file
作者: legs    时间: 2020-03-04 07:46
本帖最后由 legs 于 2020-03-04 07:47 编辑

前天回了五遍,都被吞帖了

作者: wh7211    时间: 2020-03-19 17:07
回复 1# dstnow


  1. cat 1
  2. {"Status":200,"Msg":"成功","Data":[{"TELCODE":"27","SKEY":"618aac13f9d7d751","PN":"791496908"},{"TELCODE":"27","SKEY":"ee29857654d0c8d8","PN":"791898777"},{"TELCODE":"27","SKEY":"6eeba009e8cc2b8d","PN":"714508857"}]}

  3. awk -F"{" '{for(i=1;i<=NF;i++){if($i~/SKEY/&&$i~/PN/){a=".*SKEY\042:\042([^\042]+).*PN\042:\042([^\042]+)";match($i,a,b);print b[2]"|http://="b[1]}}}' 1
  4. 791496908|http://=618aac13f9d7d751
  5. 791898777|http://=ee29857654d0c8d8
  6. 714508857|http://=6eeba009e8cc2b8d
复制代码





欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2