Windows下匹配含前导空格的行并按相同缩进插入新行的实现方法
批量修改配置文件实现方案
操作前请先备份所有待修改的配置文件,避免操作失误导致内容丢失。
你可以通过以下两种常用命令行工具实现批量操作,自动匹配目标行的缩进格式,无需手动处理不同文件的缩进差异:
方法1:GNU Sed(Linux环境首选,支持直接原地修改文件)
执行以下命令可批量处理当前目录下所有yaml配置文件,自动在匹配行下方插入对应缩进的新配置:
# 批量修改当前目录下所有.yml/.yaml文件,可自行修改文件匹配规则 sed -i -E '/^([[:space:]]*)caseSensitive: false/{a\ \1printMatchedString: false }' *.yaml
参数说明:
^([[:space:]]*)捕获目标行开头所有的空白字符(空格/制表符),存入分组\1a\是sed的追加行指令,插入的行复用捕获的分组\1保证缩进和原行完全一致-i参数直接修改原文件,测试时可先去掉-i查看输出是否符合预期
方法2:Awk(全平台兼容,适合macOS/BSD环境)
如果是macOS等默认不带GNU Sed的环境,用awk命令实现:
# 处理单个文件,输出到新文件 awk '/^[[:space:]]*caseSensitive: false/{print; match($0, /^[[:space:]]+/); print substr($0, RSTART, RLENGTH) "printMatchedString: false"; next}1' 原文件.yaml > 新文件.yaml # 批量处理当前目录所有yaml文件 for file in *.yaml; do awk '/^[[:space:]]*caseSensitive: false/{print; match($0, /^[[:space:]]+/); print substr($0, RSTART, RLENGTH) "printMatchedString: false"; next}1' "$file" > "$file.tmp" && mv "$file.tmp" "$file" done
参数说明:
match($0, /^[[:space:]]+/)提取当前行开头的所有空白字符- 插入行时复用提取到的空白前缀,保证缩进完全匹配
处理后的效果完全符合预期,所有匹配到的caseSensitive: false行下方都会自动插入相同缩进的printMatchedString: false配置。
内容的提问来源于stack exchange,提问作者Sureshchandra Jarugula
相关产品推荐
相关产品推荐

