使用sed从特定的json格式中提取日期

时间:2013-08-24 22:25:40

标签: json bash date sed grep

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

[{ “tarih”: “20130824”, “tarihView”: “24-08-2013”​​},{ “tarih”: “20130817”, “tarihView”: “17-08-2013”​​},{” tarih “:” 20130810" , “tarihView”: “2013年10月8日”},{ “tarih”: “20130803”, “tarihView”: “2013年3月8日”},{ “tarih”: “20130727” “tarihView”: “27-07-2013”​​},{ “tarih”: “20130720”, “tarihView”: “20-07-2013”​​},{ “tarih”: “20130713”, “tarihView”:” 13-07-2013 “},{” tarih “:” 20130706" , “tarihView”: “2013年6月7日”}]

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

20130824
20130817
20130810
20130803
...
20130706

如何使用sed或类似的控制台实用程序执行此操作?

非常感谢你的帮助。

2 个答案:

答案 0 :(得分:2)

此行适用于您的示例:

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

它提供相同的输出。

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

答案 1 :(得分:0)

这在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,因此很容易从该结构中获取任何数据。此方法非常安全,因为如果您的数据中的某些字段包含{ , "或任何其他可能看起来的字符,它就不会失败对于。它也不依赖于场地位置或场数。