2016-08-10 2 views
0

누군가가 내가 예를 들어 JSON 텍스트를 구문 분석 후 값 (45)을 얻을 수있는 방법을 제안 할 수있는 JSON 파일에서 키를 구문 분석하고 값을 얻을 수 있습니다 :사용 GREP은

.... 
"test": 12 
"job": 45 
"task": 11 
..... 

나는 알고 있습니다 jq 및 다른 도구와 같은 도구가 필요하지만이를 설치해야합니다.

나는 이것을 grep, awk 또는 sed 명령을 사용하여 실행시키고 싶습니다.

+3

'jq '를 설치하는 것은 그리 어렵지 않습니다. 모든 디렉토리에 복사 할 수있는 단일 이진 파일 (외부 종속성 없음)입니다. – chepner

+0

작업에'jq'와 같은 특수한 도구를 사용하지 말고'json'은'json'에 대해'sed'입니다 – sjsam

+0

나에게 유효한 json처럼 보이지 않습니다 :/ – sjsam

답변

2
awk -F'[[:space:]]*:[[:space:]]*' '/^[[:space:]]*"job"/{ print $2 }' 
sed -n 's/^[[:space:]]*"job"[[:space:]]*:[[:space:]]*//p' 
+0

json 파일의 키가 줄의 시작 부분에서 시작되는 경우는 거의 없습니다. grep/sed/awk로 간단한 작업을 할 수 있지만,''jq' ''를 강력히 추천합니다. 그것을 설치하는 것은 어렵지 않습니다 - [chepner 언급] (http://stackoverflow.com/questions/38878724/use-grep-to-parse-a-key-from-a-json-file-and-get-the) -value # comment65119527_38878724) – hek2mgl

+0

OP는 이미'jq'를 설치할 수 없다는 말을하고 표준 UNIX 도구를 사용하는 해결책을 요구했습니다. 나는 도구를 설치할 수있는 권한이없는 많은 기계를 사용합니다. 어쩌면 그것도 OP의 경우입니다, idk. 나는 또한 뛰어 들고 무언가를 빨리해야하기 때문에 많은 기계를 사용하므로 그 이유 때문에 비표준 도구를 사용하는 솔루션을 피하는 경향이 있습니다.OP 실제 입력이 게시 한 입력 형식을 따르지 않는 경우 앞에 옵션 공백을 추가합니다. –

+0

물론, 충분히 좋은 대화 형 해킹이 필요합니다. 그러나 스크립트 나 프로그램이 아닌 경우. OP가'jq'를 사용할 수 없다면 PHP, Python, Perl 등의 스크립트 언어를 사용할 수 있습니다. json을 처리 할 수있는 것이 거의 확실하게 설치됩니다. – hek2mgl

0

당신은 grep -oP (PCRE)를 사용할 수 있습니다 :

grep -oP '"job"\s*:\s*\K\d+' file 

45 

\K는 이전에 일치하는 데이터를 다시 설정하라는 위해 사용된다. 위의 명령

awk -F ':[ \t]*' '/^.*"job"/ {print $2}' filename 

는 라인의 시작 부분에 "job"이있는 라인을 일치하고 해당 라인의 second 열을 인쇄 : 당신은 단지 그것을 인쇄 할 경우, awk를 사용

0

. awk 옵션 -F은 열 구분자를 :으로 설정하고 그 뒤에 임의의 숫자 spaces 또는 tabs을 설정하는 데 사용됩니다. 작업에 대한 jq 같은

job_val=$(awk -F ':[ \t]*' '/^.*"job"/ {print $2}' filename) 
1

를 사용하여 특수 도구 :이 bash는 변수 job_val에 값을 저장하려면

가 있었다 당신의 file

[ 
{ 
"test": 12, 
"job": 45, 
"task": 11 
} 
] 
처럼 보였다

아래의 물건을 사용하면 오메

jq ".[].job" file 

file이 집에 당신을 얻을 것이다

jq ".stuff.job" file 

아래

{ 
"stuff" :{ 
. 
. 
"test": 12, 
"job": 45, 
"task": 11 
. 
. 
} 
} 

처럼 보였다 당신했다.

관련 문제