bash从长字符串中获取值

时间:2016-08-03 19:43:04

标签: bash awk sed grep

我不明白sed,awk或grep - 我尝试了最后3个小时才得到结果,但我没有得到正确答案。

我有什么: 我从icloud.com获取此信息

{u'timeStamp': 1470252602355, u'locationFinished': True, u'longitude': XX.XXXXXXXXXXXXX, u'positionType': u'GPS-Course', u'locationType': None, u'latitude': XX.XXXXXXXXXXXXX, u'isOld': False, u'isInaccurate': False, u'horizontalAccuracy': 200.0}

这是我的iPhone的位置。

但我只需要纬度和经度。我尝试过AWK,sed和grep - 我没有成为正确的结果。

6 个答案:

答案 0 :(得分:1)

在sed中(其中a.json是你的文件),它只打印经度值和纬度值):

documentReady

答案 1 :(得分:1)

看起来像一个json。您可以使用jsawk解析它,我没有使用它,但看起来它可以轻松解决您的问题。

echo "your json string" | jsawk "this.latitude"

注意:这将给出答案(谢谢sjsam)。如果json字符串变化,处理正则表达式会变得更复杂。所以最好处理这个字符串,因为json不是普通的字符串。

答案 2 :(得分:1)

这个grep管道会阻塞这些字段:

grep -o "'l[^:]\+itude':[^,]\+"

答案 3 :(得分:0)

你去......

if(typeof window != "object")
    self.window = self;

或,没有 $ tr ',' '\n' <file | grep '\(lati\|longi\)tude' u'longitude': XX.XXXXXXXXXXXXX u'latitude': XX.XXXXXXXXXXXXX

tr

答案 4 :(得分:0)

jsawk一样,您可以使用jq来处理您的JSON:

json="{u'timeStamp': 1470252602355, u'locationFinished': True, u'longitude': XX.XXXXXXXXXXXXX, u'positionType': u'GPS-Course', u'locationType': None, u'latitude': XX.XXXXXXXXXXXXX, u'isOld': False, u'isInaccurate': False, u'horizontalAccuracy': 200.0}"
echo "$json" | jq '.latitude'

答案 5 :(得分:0)

$ awk -v RS=',' -F'[\n:][[:space:]]*' '{for (i=1;i<NF;i++) if ($i ~ /(lat|long)itude/) print $(i+1) }' file
XX.XXXXXXXXXXXXX
XX.XXXXXXXXXXXXX