문자열이 정확히 일치하는 후에 yaml 파일에 줄을 추가하는 방법을 찾을 수 없지만 줄의 다른 값과 유사한 문자열은 무시합니다. 몇 가지 예가 있지만 내 경우는 아닙니다. yaml 파일이 있고 해당 구성을 자동화하고 있으며 줄 번호로 이동하여 수동으로 값을 추가하는 대신 문자열을 알아낸 다음 sed 명령을 사용하여 값을 추가하려고 합니다.
이것은 예이다
내 현재 파일 a.yaml
rules:
- name: Block PH by GeoIP country
script: ./rules/Block PH by GeoIP country.js
stage: login_success
enabled: false
........
........
........
- name: Preview-1 API (Test Application)
allowed_clients: []
app_type: non_interactive
callbacks: [] <<<<< ------- see string "callbacks:" with brackets
client_aliases: []
........
........
........
allowed_logout_urls:
- 'http://local.example.com:/login'
allowed_origins: []
callbacks: <<<<< ------- see string "callbacks:" where I want to append
- 'http://local.example.com:/callback'
주문하다
sed -i "/callbacks:/a \ \ \ \ \ \ - 'https://d1.example.com/callback'" > a.yaml
명령 결과
My Updated File a.yaml
rules:
- name: Block PH by GeoIP country
script: ./rules/Block PH by GeoIP country.js
stage: login_success
enabled: false
........
........
........
- name: Preview-1 API (Test Application)
allowed_clients: []
app_type: non_interactive
callbacks: []
- 'https://d1.example.com/callback' <<<<< ------- see problem here
client_aliases: []
........
........
........
allowed_logout_urls:
- 'http://local.example.com:/login'
allowed_origins: []
callbacks:
- 'https://d1.example.com/callback' <<<<< ------- I appended
- 'http://local.example.com:/callback'
내가 원하는 건
rules:
- name: Block PH by GeoIP country
script: ./rules/Block PH by GeoIP country.js
stage: login_success
enabled: false
........
........
........
- name: Preview-1 API (Test Application)
allowed_clients: []
app_type: non_interactive
callbacks: [] <<<<< ------- I don't want to append here
client_aliases: []
........
........
........
allowed_logout_urls:
- 'http://local.example.com:/login'
allowed_origins: []
callbacks:
- 'https://d1.example.com/callback' <<<<< ------- I want my addition only after this
- 'http://local.example.com:/callback'
일치하는 모든 문자열 뒤에 줄을 추가하고 싶지 않습니다. 위의 예에는 callback:[] 및 callback: 2개의 값이 있는 2개의 줄이 있으므로 callback: 뒤에만 추가하려고 합니다.
상상하다
Bash 스크립트 파일에서 sed 명령을 사용하고 싶습니다. 'https://$1.example.com/callback'과 같이 이 줄의 변수 값을 전달하며 명령은 다음과 같습니다.
sed -i "/callbacks:/a \ \ \ \ \ \ - 'https://$1.example.com/callback'" > a.yaml
이렇게 하면 값을 전달하고 아래와 같은 줄을 추가하여 스크립트를 재사용할 수 있습니다.
callbacks:
- 'https://z.example.com/callback'
- 'https://b.example.com/callback'
- 'https://d1.example.com/callback'
- 'http://local.example.com:/callback'
답변1
$
다음을 사용하여 줄 끝을 일치시킬 수 있습니다 .
sed -i "/callbacks:$/a\
\ - 'https://d1.example.com/callback'" a.yaml