結合された複数のファイルから特定のキーワードを持つファイルだけを抜き出す
kubectl/kustomizeなどではk8sのリソース(yamlファイル)をまとめて扱うlistという形式が内部的に存在する。kustomizeはlistの形式で出力し、kubectlはlistを読み込みまとめてapplyできる。運用ではこのlistを生成して、継続的デリバリーのシステムに渡してまとめてkubectl applyしてもらう。
問題はlist生成ロジックをいじって、手元で動作確認したい場合である。k8sリソースのlistは膨大なサイズになるので手元で確認したり他人に動作の証拠を見せるのにも一苦労である。
結論としてはawkのRS(Record Separator)が使える。
kustomizeでまとめて吐き出されたリソースファイルのうち、ghcr.ioが使われているものだけを取り出す
code: shell
kustomize build . | gawk -v RS='\n---\n' -v ORS='\n---\n' '/ghcr\.io/'
kubectl/kustomizeのlistは複数のk8sリソースを --- という区切り文字でまとめるのでRSはそのように指定する
ORS(Output Record Separator)はawkで処理した後、複数の候補があった際の区切り文字
複数行にまたがる文字列から検索して、ヒットしたらその複数行の文字列をまるごと返す、という挙動はgrepではできないのだが、awkではRecordという単位でテキストを扱う機能があって大変助かる