文字列が正確に一致した後、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