다음으로 시작하는 파일을 생성하고 싶습니다.
# topics-to-move.json
{
"topics": [],
"version": 1
}
{ "topic": "<topic_name>" }
에 항목이 없습니다 "topics":[]
. 깨끗한 목록을 제공하는 다른 스크립트에서 테마 이름을 얻을 수 있습니다.
Topic..A
Topic..B
Topic..C
topics-to-move.json
위의 각 내용을 파일 형식 으로 삽입하고 싶습니다. ? 또는 이와 유사한 것을 사용하여 {"topic":"Topic..A"},{"topic":"Topic..B"},{"topic":"Topic..C"}
이를 달성할 수 있습니까 ?sed
명확성을 위해 최종 문서는 다음과 같아야 합니다.
# topics-to-move.json
{
"topics": [
{"topic":"Topic..A"},
{"topic":"Topic..B"},
{"topic":"Topic..C"}
],
"version": 1
}
답변1
일련의 sed 명령과 몇 가지 치트를 사용하겠습니다.
첫 번째 줄을 바꾸고 시작점을 표시하려면 인라인 바꾸기를 수행하세요.
sed -i 's/"topics": \[\],/"topics": \[/g' file.out
그런 다음 원래 줄의 끝을 다시 추가하고 선행 공백 4개로 서식을 지정합니다.
sed -i '/"topics": \[/a\ \ \ \ \],' file.out
그런 다음 다른 파일에서 배열을 만듭니다.
IFS=$'\n'
topic=( $(sed -n '/^Topic/p' file.in) )
unset IFS
그런 다음 배열의 역순으로 처음 두 sed 사이의 공간을 채웁니다.
for (( i=${#topic[@]}-1 ; i>=0 ; i-- )); do sed -E -i '/"topics": \[/a\ \ \ \ {"topic":"'"${topic[$i]}"'},' file.out; done
출력은 정확합니다(쉼표 하나 제외).
# topics-to-move.json
{
"topics": [
{"topic":"Topic..A"},
{"topic":"Topic..B"},
{"topic":"Topic..C"},
],
"version": 1
}
답변2
올바른 방법은 다음과 같은 json 프로세서를 사용하는 것입니다.잭:
가정 topic_names
파일:
TopicA
TopicB
TopicC
jq --slurpfile topics <(sed 's/^\|$/"/g' topic_names) \
'.topics = ($topics | map({"topic":.}))' topics-to-move.json
산출:
{
"topics": [
{
"topic": "TopicA"
},
{
"topic": "TopicB"
},
{
"topic": "TopicC"
}
],
"version": 1
}