如何替换yq拆分时动态目标文件名中的禁用字符?
解决k8s资源文件拆分时文件名含禁用字符的问题
你可以通过yq的字符串替换功能,将资源名称中的文件名禁用字符替换为合法字符,避免报错。
问题场景
你原本使用以下命令拆分k8s资源文件:
yq '.items[]' my-file.yaml -s '.kind + "-" + .metadata.name'
但因资源名称包含冒号等禁用字符,触发报错:
Error: open ClusterRole-system:[...].yml: The filename, directory name, or volume label syntax is incorrect.
解决方案
利用yq的gsub函数对资源名称中的非法字符进行全局替换,以下是两种常用方式:
替换特定禁用字符(如冒号):
仅将冒号替换为连字符,保留其他合法字符:yq '.items[]' my-file.yaml -s '.kind + "-" + (.metadata.name | gsub(":","-"))'替换所有非法字符:
通过正则匹配所有非字母、数字、连字符、下划线的字符,统一替换为下划线,覆盖所有系统下的文件名禁用规则:yq '.items[]' my-file.yaml -s '.kind + "-" + (.metadata.name | gsub("[^a-zA-Z0-9_-]","_"))'
内容的提问来源于stack exchange,提问作者burki
相关产品推荐
相关产品推荐

