以下の内容を含むファイルが提供されます。
pkg1:
replicaCount: 1
image:
tag: latest
pullPolicy: Always
pkg2:
replicaCount: 2
image:
tag: latest
pullPolicy: Always
tag
特定のパッケージ(例:)に追加されたコンテンツを検索して別のパッケージ(例:)にpkg1
置き換えると、次のような結果が得られます。latest
junk
pkg1:
replicaCount: 1
image:
tag: junk
pullPolicy: Always
pkg2:
replicaCount: 2
image:
tag: latest
pullPolicy: Always
この投稿への回答に感謝します(文字列を探して最初の文字列を見つけたら、別の文字列を置き換えます。)「ex」を使用してこれを行うことができます。
printf "%s\n" "/pkg1//latest/s//junk/" x | ex info.txt;
ところで問題は「ex」のないイメージで実行される点だ。
"awk"でこれを行う方法はありますか?私はファイルを1行ずつ読み、そのような方法でいくつかの作業を実行できると思いますが、より簡単な方法を探していました。一行であれば問題ありません。これが最初のものか2番目のものかを常に想定することはできません。そのため、パッケージ名を検索してそのパッケージのタグを置き換えるだけです。
ベストアンサー1
最も簡単な方法は、コマンドラインYAMLパーサーを使用することです。
$ yq -y '.pkg1.image.tag |= "junk"' file
pkg1:
replicaCount: 1
image:
tag: junk
pullPolicy: Always
pkg2:
replicaCount: 2
image:
tag: latest
pullPolicy: Always
私はそれを使用していますyq
、Andrei Kislyuk jq
YAMLドキュメントラッパー(他のツールyq
も呼び出されますので、正しいツールを使用していることを確認してください。)
このコマンドは.pkg1.image.tag
キー値をstringに設定しjunk
、この-y
オプションはデフォルトのJSONの代わりにYAML出力を生成するために使用されます。
yq
私はこれがDebianベースのLinuxディストリビューションのデフォルトであると思います。 YAML文書をJSONに変換し、jq
次のように変更する必要があります。
$ yq r -j file.yml | jq '.pkg1.image.tag |= "junk"' | yq r -P -
pkg1:
replicaCount: 1
image:
tag: junk
pullPolicy: Always
pkg2:
replicaCount: 2
image:
tag: latest
pullPolicy: Always