각 행에서 JSON 데이터의 일부를 삭제하는 명령은 무엇입니까?

각 행에서 JSON 데이터의 일부를 삭제하는 명령은 무엇입니까?

test.json줄 길이가 다른 파일이 있습니다 . 몇 가지 가상의 예:

{ a: 123, b: sd, c: x45, d: 1, e: '' }
{ a: 5, b: bfgg, c: x4c, d: 31, e: '' }

d- 부분 뒤의 전체 하위 문자열을 잘라내어 각 줄에 대해 해당 문자열만 반환하고 싶습니다 .

{ a: 123, b: sd, c: x45 }
{ a: 5, b: bfgg, c: x4c }

내가 찾은여기비슷한 질문에 내 질문을 적용하려고 합니다.

echo test.json |  sed 's/. d:/' > newtest.json

한 줄이 아닌 전체 파일에 대해 이 작업을 수행해야 합니다.

답변1

명령줄에서 json 변환을 많이 수행하는 경우 jq 도구를 구하고 사용법을 배우는 것은 시간을 투자할 가치가 있습니다.

http://stedolan.github.io/jq/

위의 답변에서는 실제로 json을 구문 분석하지 않고도 최소한의 변환을 수행할 수 있다고 제안하지만 결국 정규식을 통해 결함이 있는 json 파서를 다시 만들거나 선택한 파서의 언어로 기본 json을 사용하도록 되돌리게 됩니다.

jq는 빠르고 사용하기 쉬우므로 도구 상자에 보관할 수 있는 매우 편리한 도구입니다.

BWT, 테스트 데이터가 잘못된 json이므로 위의 솔루션이 복잡해집니다. 그것을 고치면

{ "a":123 , "b": "sd", "c": "x45", "d": 1, "e": "" }
{ "a":5 , "b": "bfgg", "c": "x4c", "d": 31, "e": "" }

그러면 이 jq 명령이 요구 사항을 충족합니다.

 jq -c '{a,b,c}' test.json

{"a":123,"b":"sd","c":"x45"}
{"a":5,"b":"bfgg","c":"x4c"}

답변2

sed '/d:/s/, d:[^}]*/ /' test.json

전체 파일을 살펴보고 기호( 기호는 줄에 남아 있음) 까지 각 줄의 d:모든 부분을 제거합니다., d:.*}}

답변3

@Rush의 답변을 사용하는 것이 sed아마도 이 문제를 해결하는 가장 좋은 방법일 것입니다. 그러나 다음 awk을 사용하여 이를 수행할 수도 있습니다.

$ awk -F ', d.* ' '{print $1, $2}' file.txt 
{ a: 123, b: sd, c: x45 }
{ a: 5, b: bfgg, c: x4c }

awk위의 내용은 데이터를 분할 하는 데 사용됩니다 , d.*. 이는 AWK가 문자열을 분할하여 생성된 데이터를 $1포함하는 2개의 데이터 필드를 생성합니다.$2

답변4

객체 세트를 포함하는 유효한 JSON 파일이 있다고 가정합니다.

{"a":123,"b":"sd","c":"x45","d":1,"e":"''"}
{"a":5,"b":"bfgg","c":"x4c","d":31,"e":"''"}

또는 이에 상응하는

{
  "a": 123,
  "b": "sd",
  "c": "x45",
  "d": 1,
  "e": "''"
}
{
  "a": 5,
  "b": "bfgg",
  "c": "x4c",
  "d": 31,
  "e": "''"
}

각 객체에서 d및 키를 제거하고 싶습니다.e

를 사용하여 jq한 번에 하나의 키를 삭제합니다.

jq -c 'del(.d) | del(.e)' file.json

한 번에 두 개의 키를 삭제합니다.

jq -c 'del(.d, .e)' file.json

이들 중 하나의 결과는 다음과 같습니다.

{"a":123,"b":"sd","c":"x45"}
{"a":5,"b":"bfgg","c":"x4c"}

세 번째 접근 방식(실제 키를 이름으로 언급하지 않음)은 객체를 "항목" 목록으로 변환한 to_entries다음 마지막 두 항목을 제거하고 목록을 다시 수정된 객체로 변환하는 것입니다.

jq -c 'to_entries | del(.[-2:]) | from_entries' file.json

이는 질문 텍스트에서 묻는 내용과 가장 유사하며, 결과는 개체의 키 순서에 따라 달라집니다.

관련 정보