sed를 사용하여 },{"Foo"를 }\n{"Foo"로 변경하는 방법은 무엇입니까?

sed를 사용하여 },{"Foo"를 }\n{"Foo"로 변경하는 방법은 무엇입니까?

나는 },{한 줄에 하나의 개체를 갖고 쉼표를 제거하고 싶습니다. 한편으로는 편집기를 사용하여 파일을 볼 수 있기를 원하며 대부분의 편집자는 55MB 라인 파일을 좋아하지 않습니다. 다음 sed명령을 사용했지만 길이가 0인 파일을 작성했습니다. 내가 원하는 결과를 어떻게 얻을 수 있나요?

cat INPUT | sed -n 's/},{"Foo"/}\n{"Foo"/g' > OUTPUT

답변1

sed 기호는 -n조용함을 의미합니다. 그러면 자동 줄 인쇄가 비활성화되고 명령을 사용하여 명시적으로 줄을 인쇄해야 합니다 p.

다음과 같이 또는 없이 명령을 사용하십시오 -n.p

sed 's/},{"Foo"/}\n{"Foo"/g' file >output

또는:

sed -n 's/},{"Foo"/}\n{"Foo"/gp' file >output

답변2

개체가 쉼표로 구분되어 있으므로 배열에 있다고 가정합니다.

배열에 있고 해당 배열이 다음과 같은 최상위 배열인 경우

[{"Foo":"first"},{"Foo":"second"},{"Foo":"third"}]

...그럼 당신은 사용할 수 있습니다JSON 프로세서jq외부 배열을 다음과 같이 별도의 개체 집합으로 확장합니다.

jq -c '.[]' file

이전 예제 입력을 기반으로 하면 다음과 같은 JSON 개체 집합이 생성됩니다.

{"Foo":"first"}
{"Foo":"second"}
{"Foo":"third"}

이는 문서의 구조를 변경하므로 다음과 같은 것을 사용할 수 있습니다.jtcjq, 기본적으로 와 마찬가지로 문서를 보기 좋게 인쇄할 수 있지만 각 구조의 가장 낮은 수준을 컴팩트한 형식으로 렌더링하는 또 다른 JSON 프로세서입니다 .

$ jtc -tc file
[
   { "Foo": "first" },
   { "Foo": "second" },
   { "Foo": "third" }
]

주로 이 문서를 시각적으로 탐색하고 싶으신 것 같으니 다음에도 관심을 가지실 수 있습니다.jless유용, 이는 "JSON 브라우저"입니다. 문서의 구조와 (대화형으로) 축소 가능한 하위 구조가 표시됩니다.

▽ [{…}, {…}, {…}]
  ▽ [0]: {Foo: "first"}
      Foo: "first"
  ▽ [1]: {Foo: "second"}
      Foo: "second"
  ▽ [2]: {Foo: "third"}
      Foo: "third"

관련 정보