I have a below YAML
file called file1.yaml
default:
app:
service-v1:
country:
list: LIST_TO_REPLACE
I am trying to replace LIST_TO_REPLACE text with the below YAML
file list data.
file2.yml
app:
list-data: // Need to extract this node data and replace in the file1.yml
- key1: value
key2: value
key3:
- list1
- list2
- list3
- key4: value
key5: value
key6:
- list1
- list2
- list3
I am using YQ
to replace the list of data from file2 to file1. But it is not correctly indented in file1.
Is there any way to replace the entire node and it could follow the indentation of file1?
Expected Output:
default:
app:
service-v1:
country:
list: //After replace operation
- key1: value
key2: value
key3:
- list1
- list2
- list3
- key4: value
key5: value
key6:
- list1
- list2
- list3
CodePudding user response:
As you have tagged jq
, I assume you are looking for a solution using kislyuk/yq. Here's one using input
for the second file:
yq -y '
.default.app."service-v1".country.list = input.app."list-data"
' file1.yaml file2.yaml
default:
app:
service-v1:
country:
list:
- key1: value
key2: value
key3:
- list1
- list2
- list3
- key4: value
key5: value
key6:
- list1
- list2
- list3
For a solution using mikefarah/yq, you could use load
to read the second file.
yq '
.default.app."service-v1".country.list = load("file2.yaml").app."list-data"
' file1.yaml
default:
app:
service-v1:
country:
list:
- key1: value
key2: value
key3:
- list1
- list2
- list3
- key4: value
key5: value
key6:
- list1
- list2
- list3
Note: With this implementation of yq, you can also use the -i
flag to modify file1.yaml
in-place.