Shell 两个字符之间的字符串

Shell 两个字符之间的字符串,shell,awk,sed,cut,Shell,Awk,Sed,Cut,首先,我想为现在发布的类似帖子道歉。但由于我无法解决它,因此我张贴它 我有一个有线字符串模式(mongo输出),我只需要将其转换为值 "_id" : ObjectId("59280d9b95385c78b73252e4"), "categorySetId" : NumberLong(1100000041), "categorySetName" : "PROD GROUP", "serviceableProductFlag" : "N", "categoryId" : NumberLong(105

首先,我想为现在发布的类似帖子道歉。但由于我无法解决它,因此我张贴它

我有一个有线字符串模式(mongo输出),我只需要将其转换为值

"_id" : ObjectId("59280d9b95385c78b73252e4"), "categorySetId" : NumberLong(1100000041), "categorySetName" : "PROD GROUP", "serviceableProductFlag" : "N", "categoryId" : NumberLong(1053), "pid" : "800-319-03", "productFamily" : "PP", "productType" : "SEATS", "subGroup" : "PP SER", "description" : "^AY,EECH, NG-C", "inventoryItemId" : NumberLong(200699), "itemStatusMfg" : "S-INTV", "organizationIdMfg" : NumberLong(90000), "src" : "orcl", "syncedOn" : NumberLong("1495797136138"), "CreationDate" : ISODate("2017-05-26T11:12:16.138Z"), "CreatedBy" : "tool", "LastUpdatedDate" : ISODate("2017-05-26T11:12:16.138Z"), "LastUpdatedBy" : "tool", "itemFamilyDesc" : "PP FAMILY", "itemFamilyGroupId" : 750, "itemFamilyGroupName" : "PP SERIES PRODUCTS"
我想要像这样的输出

59280d9b95385c78b73252e4,1100000041,PROD GROUP,N,1053,800-319-03,PP, SEATS,PP SER ,'^AY,EECH, NG-C', 200699,S-INTV,90000,orcl,1495797136138,2017-05-26T11:12:16.138Z,tool,2017-05-26T11:12:16.138Z,tool,PP FAMILY,750,PP SERIES PRODUCTS
我尝试过各种sed和awk,但我无法实现

sed 's/"[^"]*://g' text.txt
sed 's/"[^:]*://g' text.txt
有人能帮我吗

非常感谢。awk解决方案:

awk -F': +|, *"' '{ r=""; for(i=2;i<=NF;i+=2) { 
         gsub(/^ *([^(]+\()?|"|\)$/,"",$i); 
         if(index($i,",")!=0){ $i="\047"$i"\047" } r=(r!="")? r","$i : $i 
     } print r }' text.txt

  • -F':|,*“'
    -字段分隔符


  • for(i=2;i一些字段值嵌入了逗号,因此这很可能是徒劳的,但是

    #! /bin/sed -rf
    
    s/\s*"[^"]+"\s*:\s*\w+\s*\("([^"]*)"\)\s*/\1/g
    s/\s*"[^"]+"\s*:\s*\w+\s*\(([^)]*)\)\s*/\1/g
    s/\s*"[^"]+"\s*:\s*"([^"]*)"\s*/\1/g
    s/\s*"[^"]+"\s*:\s*([0-9]+)\s*/\1/g
    

    不要这么长的一行,把它分解…用一个最小的例子,比如3-5个元素…输入是某种xml、json等吗?是不是有比使用regexUse更好的工具?regexUse是一种提供mongo客户端库的编程语言?所以你想要单个输入值
    “^AY,EECH,NG-C”
    (来自
    “description”:^AY,EECH,NG-C“
    )成为3个独立的输出值
    ^AY,EECH,NG-C
    ?是的。这是一个field@user2854333,如果此值
    “^AY,EECH,NG-C”不应分开,则应保持原样(用双引号括起来)@用户2854333,您需要在问题中发布准确的最终输出,以便我查看it@user2854333,我要求在你的问题中公布确切的最终结果,因为它应该在那里,而不是在comments@user2854333,您是否理解问题中的短语post确切的最终输出?
    
    #! /bin/sed -rf
    
    s/\s*"[^"]+"\s*:\s*\w+\s*\("([^"]*)"\)\s*/\1/g
    s/\s*"[^"]+"\s*:\s*\w+\s*\(([^)]*)\)\s*/\1/g
    s/\s*"[^"]+"\s*:\s*"([^"]*)"\s*/\1/g
    s/\s*"[^"]+"\s*:\s*([0-9]+)\s*/\1/g