我正在使用 bash 命令,gps location
它返回日期、时间和位置信息。
[john@hostname :~/develp] $ gps location
Location: {"date": "16/07/20", "time": "19:01:22", "latitude": "34.321", "longitude": "133.453", "altitude": "30m"}
Run Code Online (Sandbox Code Playgroud)
我想将经度写入文件,在到达那里之前我需要正确解析字符串。
[john@hostname :~/develp] $ variable=`gps location | awk '/"longitude":/ {print $9}'`
[john@hostname :~/develp] $ echo $variable
"133.453",
[john@hostname :~/develp] $
Run Code Online (Sandbox Code Playgroud)
目前,awk
不是搜索经度,它只是获取整个字符串并找到第 9 个字符串。理想情况下,我想使用正则表达式/关键字方法并找到经度,然后找到下一个字符串。我试过使用grep | cut
也试过sed
。不走运,我能做的就是使用awk
.
Ed *_*ton 12
去掉Location:
JSON 就剩下你了:
$ echo '{"date": "16/07/20", "time": "19:01:22", "latitude": "34.321", "longitude": "133.453", "altitude": "30m"}' |
jq .longitude
"133.453"
Run Code Online (Sandbox Code Playgroud)
查看手册页是否gps
可以选择不预先打印Location:
关键字,如果不剥离它很容易,例如:
$ echo 'Location: {"date": "16/07/20", "time": "19:01:22", "latitude": "34.321", "longitude": "133.453", "altitude": "30m"}' |
cut -d':' -f2- | jq .longitude
"133.453"
Run Code Online (Sandbox Code Playgroud)
或者:
$ echo 'Location: {"date": "16/07/20", "time": "19:01:22", "latitude": "34.321", "longitude": "133.453", "altitude": "30m"}' |
sed 's/Location://' | jq .longitude
"133.453"
Run Code Online (Sandbox Code Playgroud)
小智 5
不幸的是,我没有足够的声誉来发表评论,但要扩展 Ed Morton 的回答:如果您jq
使用该-r
选项调用,它会在输出只是一个字符串时自动去除引号(就像您的情况一样):
$ echo 'Location: {"date": "16/07/20", "time": "19:01:22", "latitude": "34.321", "longitude": "133.453", "altitude": "30m"}' | cut -d':' -f2- | jq -r .longitude
133.453
Run Code Online (Sandbox Code Playgroud)