gps location
날짜, 시간 및 위치 정보를 반환하는 bash 명령을 사용하고 있습니다 .
[john@hostname :~/develp] $ gps location
Location: {"date": "16/07/20", "time": "19:01:22", "latitude": "34.321", "longitude": "133.453", "altitude": "30m"}
경도를 파일에 쓰고 싶은데 거기에 도달하기 전에 문자열을 올바르게 구문 분석해야 합니다.
[john@hostname :~/develp] $ variable=`gps location | awk '/"longitude":/ {print $9}'`
[john@hostname :~/develp] $ echo $variable
"133.453",
[john@hostname :~/develp] $
현재는 awk
경도를 검색하는 대신 전체 문자열을 가져와서 9번째 문자열을 찾습니다. 이상적으로는 정규식/키워드 접근 방식을 사용하고 경도를 찾은 다음 다음 문자열을 찾고 싶습니다. 사용해 보고 grep | cut
시도해 보았습니다 sed
. 운이 좋지 않습니다. 내가 할 수 있는 일은 awk
.
답변1
이를 제거하면 Location:
JSON이 남습니다.
$ echo '{"date": "16/07/20", "time": "19:01:22", "latitude": "34.321", "longitude": "133.453", "altitude": "30m"}' |
jq .longitude
"133.453"
키워드를 미리 인쇄하지 않는 옵션이 있으면 매뉴얼 페이지를 참조하세요. 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"
또는:
$ 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"
답변2
불행히도 나는 논평할 평판이 충분하지 않지만 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
답변3
이 기능을 사용하지 않고 시도 하고 싶다면 jq
(예: 사용할 수 없는 경우)그리고귀하의 예에서 알 수 있듯이 출력은 항상 한 줄이며 다음 sed
방법도 작동합니다.
sed -r 's/.*"longitude": "([^"]+)".*/\1/'
이것은 것이다
- 큰따옴표로 묶인 문자열을 찾습니다(
"([^"]+)"
예: 시작 뒤에"
"끝까지 " 이외의 것 포함된"
문자열 이 옴). 여기서 묶인 내용은 문자열 바로 다음에"
"캡처 그룹"으로 정의됩니다.( ... )
"longitude":
- 전체 줄을 캡처 그룹의 내용( )으로 바꿉니다.
\1
귀하의 경우 실제 경도 값입니다.
시험:
~$ echo 'Location: {"date": "16/07/20", "time": "19:01:22", "latitude": "34.321", "longitude": "133.453", "altitude": "30m"}' | sed -r 's/.*"longitude": "([^"]+)".*/\1/'
133.453
답변4
jq를 설치할 수 없다면 루프를 사용하여 순수 bash에서 설치할 수 있습니다.
i=1
words=$(gps location)
word=$(echo $words | cut -d',' -f$i)
while ( [ -n "$word" ] )
do
echo $word | grep longitude | cut -d' ' -f2
(( i+=1 ))
word=$(echo $words | cut -d',' -f$i)
done