【问题标题】:How to take a particular data using GREP?如何使用 GREP 获取特定数据?
【发布时间】:2014-07-04 04:35:15
【问题描述】:

命令:

grep -oP '(?<=\"name\":\")[^"]*|(?<=\"title\":\")[^"]*' *.json >newjson

o/p 得到,

10XANY10G_1.json:chMax
10XANY10G_1.json:Max Frequency in GHz
10XANY10G_1.json:up
10XANY10G_1.json:UP
10XANY10G_1.json:down
10XANY10G_1.json:DOWN
10XANY10G_1.json:CapabilityList
10XANY10G_1.json:Capabilities
10XANY10G_1.json:encoding
10XANY10G_1.json:Encoding

预期 o/p:

chMax:"Max Frequency in GHz",

up:"UP",

down:"DOWN",

文件内容:

{"card":{"cardName":"10AN10G","portSignalRates":["10AN10G-1-OTU2","10AN10G-1-OTU2E","10AN10G-1-TENGIGE","10AN10G-1-STM64"],"listOfPort":{"10AN10G-1-OTU2":{"portAid":"10AN10G-1-OTU2","signalType":"OTU2","tabNames":["PortDetails"],"requestType":{"PortDetails":"PTP"},"paramDetailsMap":{"PortDetails":[{"type":"dijit.form.TextBox","name":"signalType","title":"Signal Rate","id":"","options":[],"label":"","value":"OTU2","checked":"","enabled":"false","selected":""},{"type":"dijit.form.TextBox","name":"userLabel","title":"Description","id":"","options":[],"label":"","value":"","checked":"","enabled":"true","selected":""},{"type":"dijit.form.Select","name":"Frequency","title":"Transmit Frequency",}}}}}}

【问题讨论】:

  • 我没有在文件中看到您想要获取的数据。没有Max Frequency,没有up
  • 另外,用 grep 解析 JSON 几乎没有意义。
  • 来自上述文件的预期 o/p:signalType:"Signal Rate", userLabel:"Description", Frequecy:"Transmit Frequency",

标签: grep


【解决方案1】:

我想你正在寻找这个,

$ grep -oP '(?<=\"name\":\")[^"]*|(?<=\"title\":)[^,]*' file
signalType
"Signal Rate"
userLabel
"Description"
Frequency
"Transmit Frequency"

得到想要的输出

$ grep -oP '(?<=\"name\":\")[^"]*|(?<=\"title\":)[^,]*' file | paste -d: - -
signalType:"Signal Rate"
userLabel:"Description"
Frequency:"Transmit Frequency"

【讨论】:

    【解决方案2】:

    我认为您的问题是您正在使用 | 对两个组进行 ORing 尝试删除 | 并且您将更接近您正在寻找的内容,但您可能需要添加一个术语来跳过任何中间标签对于 nametitle 不是立即彼此之后的情况,那么您可能必须聪明地处理条目有名称但没有标题的情况。

    如前所述,grep 不是解析 json 的最佳工具还有很多其他工具 - 我个人建议使用 python 和 json 库来加载您的文件,然后输出您需要的标签。 p>

    【讨论】:

      【解决方案3】:

      这是一个gnu awk(由于RS)版本来提取数据:

      awk -F\" '/title/ {print $3":"$7}' RS='name' file
      signalType:Signal Rate
      userLabel:Description
      Frequency:Transmit Frequency
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-10-21
        • 2021-06-06
        • 1970-01-01
        • 2019-08-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多