タグの値を変更しようとしていますが、sedは機能しません。
ファイルの外観は次のとおりです。タグ値を一意に変更したいです。
app1:
tag: "dev-0.114"
repository: kafka
pullPolicy: Always
app2:
tag: "dev-0.59"
repository: nginx
pullPolicy: Always
これが私が試したことです。
sed -i "" "/^\(app1.*[[:space:]]*tag: \).*/s//\1dev-0.115/" values.yaml
しかし働かない
答え1
.app1.tag
値を文字列に変更するには、内部編集にfromを使用します。dev-0.115
yq
https://github.com/kislyuk/yq(これはjq
ラッパーです):
$ cat file.yml
app1:
tag: "dev-0.114"
repository: kafka
pullPolicy: Always
app2:
tag: "dev-0.59"
repository: nginx
pullPolicy: Always
$ yq -i -y '.app1.tag = "dev-0.115"' file.yml
$ cat file.yml
app1:
tag: dev-0.115
repository: kafka
pullPolicy: Always
app2:
tag: dev-0.59
repository: nginx
pullPolicy: Always
一部のLinuxシステムにある方法を使用してyq
文書をJSONに変換し、から修正してから、jq
再変換してファイルに書き込みますnewfile.yml
。
$ yq -j r file.yml | jq '.app1.tag = "dev-0.115"' | yq -P r - >newfile.yml
$ cat newfile.yml
app1:
tag: dev-0.115
repository: kafka
pullPolicy: Always
app2:
tag: dev-0.59
repository: nginx
pullPolicy: Always
答え2
あなたは読むことができますNパターンスペースに追加の行を挿入するには、コマンドを使用しますn
。だから与えられた
$ cat file.yaml
app1:
tag: "dev-0.114"
repository: kafka
pullPolicy: Always
app2:
tag: "dev-0.59"
repository: nginx
pullPolicy: Always
それから
$ sed '/^app1:/{n;s/tag:.*/tag: "dev-0.115"/;}' file.yaml
app1:
tag: "dev-0.115"
repository: kafka
pullPolicy: Always
app2:
tag: "dev-0.59"
repository: nginx
pullPolicy: Always
答え3
このタスクでは、利用可能な最も簡単なツールを使用します。
tr -d '"' < file.yml