어떤 이유로 이 명령을 사용하여 JSON 출력을 jq
구문 분석 할 수 없습니다.curl
grep
, awk
, sed
등과 같은 표준 Unix 도구를 사용하여 특정 필드를 추출해야 합니다.
출력 예 curl
:
[
{
"case_id": 1500,
"date": "13:58 02-02-2021",
"user": "admin",
"ip": "1.2.3.4",
"type": "test",
"active": "true"
},
{
"case_id": 1501,
"date": "14:45 02-02-2021",
"user": "admin",
"ip": "1.2.3.5",
"type": "dev",
"active": "false"
}
]
ip
필드 sum 의 값을 추출하려면 정규식이 필요합니다 type
.
순수 IP 1.2.3.4를 추출해야 합니다.
같은 행에 쉼표로 구분된 값이 필요합니다. 예를 들어:
1.2.3.4, test
1.2.3.5, dev
답변1
awk
해결책.
$ awk -F\" '$2~/^(ip|type)$/{a=a$4","}END{print substr(a,0,length(a)-1)}' file.txt
1.2.3.4,test,1.2.3.5,dev
$
답변2
다른 것의 또 다른 변형
jq -r '.[]| "\(.ip), \(.type)"' < jsonfile
답변3
형식이 항상 예제에 표시된 대로 ip
한 줄씩 표시된다면 type
이 방법이 sed
작동할 것입니다.
$ curl ... | sed -n '/ip\|type/{s/[^:]*: "\([^"]*\)"/\1/;N;s/\n[^:]*: "\([^"]*\).*/ \1/p};'
1.2.3.4, test
1.2.3.5, dev
다른 줄에 있지만 ip
여전히 앞에 나타날 수 있는 경우 type
이 대안도 작동합니다.
$ curl ... | sed -n '/ip/{s/[^:]*: "\([^"]*\)"/\1/;h;d};/type/{s/[^:]*: "\([^"]*\).*/\1/;x;G;s/\n/ /p}'
1.2.3.4, test
1.2.3.5, dev
답변4
paste -d ',' <(grep -wE 'ip' INPUT | awk -F'"' '{ print $4 }') <(grep -wE 'type' INPUT | awk -F'"' '{ print $4 }')