【问题标题】:Extract dates from a specific json format with sed使用 sed 从特定的 json 格式中提取日期
【发布时间】:2023-04-03 21:49:01
【问题描述】:

我有一个包含以下示例代码行的 json 文件:

[{"tarih":"20130824","tarihView":"24-08-2013"},{"tarih":"20130817","tarihView":"17-08-2013"},{" tarih":"20130810","tarihView":"10-08-2013"},{"tarih":"20130803","tarihView":"03-08-2013"},{"tarih":"20130727" ,"tarihView":"27-07-2013"},{"tarih":"20130720","tarihView":"20-07-2013"},{"tarih":"20130713","tarihView":" 13-07-2013"},{"tarih":"20130706","tarihView":"06-07-2013"}]

我需要将 yy/mm/dd 格式的所有日期提取为具有正确行尾的文本格式:

20130824
20130817
20130810
20130803
...
20130706

如何使用 sed 或类似的控制台实用程序来做到这一点?

非常感谢您的帮助。

【问题讨论】:

    标签: json bash date sed grep


    【解决方案1】:

    此行适用于您的示例:

    grep -Po '\d{8}' file
    

    或使用 BRE:

    grep -o '[0-9]\{8\}' file
    

    它输出:

    20130824
    20130817
    20130810
    20130803
    20130727
    20130720
    20130713
    20130706
    

    如果你想提取"tarih":"之后的字符串,你可以:

    grep -Po '"tarih":"\K\d{8}' file
    

    它给出相同的输出。

    请注意,正则表达式不会进行日期字符串验证。

    【讨论】:

    • 另请注意,如果结构发生变化,此方法将失败。例如,它将为该部分输出 01234567:{"tarih":"20130824","tarihView":"24-08-2013","test":"0123456789"} 第二个解决方案将失败,此输入 {"tarih" : "20130824","tarihView":"24-08-2013"} 甚至不输出任何内容。因此,如果您不打算更改输入文件结构,这是一个很好的解决方案,但不要使用它。
    • 你能帮我解决这个问题吗? stackoverflow.com/questions/18428246/…
    【解决方案2】:

    这在 python 中非常简单:

    #!/bin/bash
    python -c "vals=$(cat jsonfile)
    for curVal in vals: print curVal['tarih']"
    

    如果我将你的示例粘贴到 jsonfile 我会得到这个输出

    20130824
    20130817
    20130810
    20130803
    20130727
    20130720
    20130713
    20130706
    

    这正是你需要的,对吧?

    这是可行的,因为在 python 中 [] 是 list 而 {} 是 dictionary,因此很容易从该结构中获取任何数据。此方法也非常安全,因为如果数据中的某些字段包含 { , " 或 sed 可能会查找的任何其他字符,它不会失败。它也不依赖于字段位置或字段数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-31
      • 1970-01-01
      相关资源
      最近更新 更多