정확한 문자열을 일치시킨 후 sed를 사용하여 Linux yaml 파일에 줄을 추가하는 방법

정확한 문자열을 일치시킨 후 sed를 사용하여 Linux yaml 파일에 줄을 추가하는 방법

문자열이 정확히 일치하는 후에 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

관련 정보