다음과 같은 콘텐츠 파일이 있습니다.
content.json(객체 배열)
[
{ "interval": 1, "expired": 3, "ignored": [ ".git", ".p4" ]},
{ "interval": 2, "expired": 4, "ignored": [ ".git", ".p4" ]},
]
내용은 비슷하지만 값이 다른 구성 파일이 있습니다.
config.json(객체값)
{ "interval": 3, "expired": 3, "ignored": [ ".git", ".p4" ]},
{ "interval": 4, "expired": 4, "ignored": [ ".git", ".p4" ]},
내 목표는 config.json 파일의 내용을 content.json 파일에 추가하여 새 content.json 파일이 다음과 같이 되도록 하는 것입니다.
[
{ "interval": 1, "expired": 3, "ignored": [ ".git", ".p4" ]},
{ "interval": 2, "expired": 4, "ignored": [ ".git", ".p4" ]},
{ "interval": 3, "expired": 3, "ignored": [ ".git", ".p4" ]},
{ "interval": 4, "expired": 4, "ignored": [ ".git", ".p4" ]},
]
},\n]
내 생각은 content.json 파일에서 정규식을 찾아 config.json 파일의 내용으로 바꾸는 것입니다 . 저는 이러한 명령을 원격으로 실행하고 있으므로 sed를 사용하여 단일 명령으로 실행하는 것이 좋습니다. 그러나 어떻게 든 나는 이것을 달성하기 위해 sed에서 적절한 문서/도움을 얻지 못합니다.
누구든지 여기서 도와줄 수 있나요?
답변1
이러한 파일이 유효한 JSON 파일이라고 가정합니다. 즉, content.json
파일은 다음과 같습니다.
[
{ "interval": 1, "expired": 3, "ignored": [ ".git", ".p4" ]},
{ "interval": 2, "expired": 4, "ignored": [ ".git", ".p4" ]}
]
또는 좋아한다
{ "interval": 1, "expired": 3, "ignored": [ ".git", ".p4" ]}
{ "interval": 2, "expired": 4, "ignored": [ ".git", ".p4" ]}
config.json
처럼 보인다
[
{ "interval": 3, "expired": 3, "ignored": [ ".git", ".p4" ]},
{ "interval": 4, "expired": 4, "ignored": [ ".git", ".p4" ]}
]
또는 좋아한다
{ "interval": 3, "expired": 3, "ignored": [ ".git", ".p4" ]}
{ "interval": 4, "expired": 4, "ignored": [ ".git", ".p4" ]}
...이를 jq
사용하면 두 배열을 필요한 JSON 구조로 쉽게 병합할 수 있습니다.
$ jq -s flatten content.json config.json
[
{
"interval": 1,
"expired": 3,
"ignored": [
".git",
".p4"
]
},
{
"interval": 2,
"expired": 4,
"ignored": [
".git",
".p4"
]
},
{
"interval": 3,
"expired": 3,
"ignored": [
".git",
".p4"
]
},
{
"interval": 4,
"expired": 4,
"ignored": [
".git",
".p4"
]
}
]
flatten
의 명령은 jq
배열의 최상위 항목을 병합합니다. 배열은 두 개의 개별 배열 항목으로 각 파일의 데이터로 구성된 배열입니다.
jq -c
보다 컴팩트한 출력을 원하시면 :
$ jq -cs flatten content.json config.json
[{"interval":1,"expired":3,"ignored":[".git",".p4"]},{"interval":2,"expired":4,"ignored":[".git",".p4"]},{"interval":3,"expired":3,"ignored":[".git",".p4"]},{"interval":4,"expired":4,"ignored":[".git",".p4"]}]
답변2
이렇게 하는 것이 좋습니다 jq
(다른 답변 참조).
그러나 실제로 sed를 사용해야 하고 구성 파일에 여는 대괄호와 닫는 대괄호가 없는 경우(표시된 대로) 다음을 수행하십시오(GNU 사용 sed
).
sed -i -e '$rconfig.json' -e '$a]' -e '$d' content.json