如何提取指定目录下的所有变量到单个文件并去除重复项
变量提取去重解决方法
原命令问题
- 第一步的
grep -rI "\$.*" folder/ >> output.txt匹配规则太宽泛,\$.*会匹配$之后的整行内容,无法单独定位变量片段 - 第二步的sed命令仅实现了打印符合规则的行,没有单独提取变量名的逻辑,自然无法得到预期结果
正确实现方案
你可以直接从目标目录扫描,也可以基于已生成的output.txt处理,两种方案如下:
方案1:直接扫描目标目录提取去重
grep -rIoP '\$\{?[A-Za-z0-9_]+' folder/ | sed -E 's/^\$\{?//' | sort -u > unique_vars.txt
命令各部分说明:
grep -rIoP:-r递归扫描目录,-I跳过二进制文件,-o仅输出匹配到的片段而非整行,-P启用Perl正则语法- 正则
\$\{?[A-Za-z0-9_]+:匹配Shell变量的两种标准格式$VAR和${VAR}的前缀部分 sed -E 's/^\$\{?//':去除匹配结果开头的$或者${,得到纯变量名sort -u:对变量名排序并去除重复项- 最终结果写入
unique_vars.txt文件
方案2:基于已生成的output.txt处理
grep -oP '\$\{?[A-Za-z0-9_]+' output.txt | sed -E 's/^\$\{?//' | sort -u > unique_vars.txt
只需要把第一步的扫描源替换为你已经生成的output.txt即可,后续处理逻辑和方案1完全一致。
用你提供的示例内容运行后,会得到去重后的纯变量名列表,包含MY_REGISTY、MY_PR、IMAGE_NAME、VERSION等所有你需要的变量。
内容的提问来源于stack exchange,提问作者Oleh F.
相关产品推荐
相关产品推荐

