![일반 텍스트 입력에서 기존 JSON 문서에 배열 항목 추가](https://linux55.com/image/131183/%EC%9D%BC%EB%B0%98%20%ED%85%8D%EC%8A%A4%ED%8A%B8%20%EC%9E%85%EB%A0%A5%EC%97%90%EC%84%9C%20%EA%B8%B0%EC%A1%B4%20JSON%20%EB%AC%B8%EC%84%9C%EC%97%90%20%EB%B0%B0%EC%97%B4%20%ED%95%AD%EB%AA%A9%20%EC%B6%94%EA%B0%80.png)
아래와 같이 명령이 출력되는 상황이 발생했습니다.
192.168.1.84
192.168.1.85
이것을 사용하고 다른 파일을 변경하고 싶습니다. 즉, 이 양식과 같이 이 IP 주소를 차례로 추가하고 싶습니다. 다음과 같은리소스 레코드 세트철사.
ubuntu@kops:/mujahid$ cat change-resource-record-sets.json
{
"Comment": "Update record to reflect new IP address of home router",
"Changes": [
{
"Action": "UPSERT",
"ResourceRecordSet": {
"Name": "testing.mak.online.",
"Type": "A",
"TTL": 60,
"ResourceRecords": [
{
"Value": "192.168.1.84"
},
{
"Value": "192.168.1.5"
}
]
}
}
]
}
답변1
생성된 IP 주소 목록에서 올바른 JSON을 생성하려면 somecommand
다음을 사용하세요.jq
:
somecommand | jq -Rs '{
Comment: "Update record to reflect new IP address of home router",
Changes: [ {
Action: "UPSERT",
ResourceRecordSet: {
Name: "testing.mak.online.",
Type: "A",
TTL: 60,
ResourceRecords: split("\n")|.[0:-1]|map({Value:.})
} } ] }'
이로 인해
{
"Comment": "Update record to reflect new IP address of home router",
"Changes": [
{
"Action": "UPSERT",
"ResourceRecordSet": {
"Name": "testing.mak.online.",
"Type": "A",
"TTL": 60,
"ResourceRecords": [
{
"Value": "192.168.1.84"
},
{
"Value": "192.168.1.85"
}
]
}
}
]
}
somecommand
출력이 주어지면
192.168.1.84
192.168.1.85
답변2
입력을 배열에 저장하고 루프를 통해 모든 것을 출력할 수 있습니다.
#!/bin/bash
OLDIFS=$IFS
IFS=' '
ARR=($@)
for i in "${ARR[@]}"
do
echo $i >>/output/file.txt
done
IFS=$OLDIFS
스크립트는 입력한 모든 내용을 한 줄씩 출력합니다.
호출 예시:thisscript.sh $(command that generates your IP's)