如何在sed命令中插入制表符以保持YAML文件的缩进格式
你的问题主要出在两个地方:bash变量赋值的语法错误,以及新增行没有带上和原列表项一致的缩进空格。我来帮你修正:
1. 先修正变量赋值的语法问题
bash里变量赋值时,变量名前不能加$,你原来的$target_string=" - develop"是错误的写法,会导致脚本报错,正确的写法是去掉$。
2. 给新增行加上正确的缩进
从你给出的输出可以看到,原列表项(比如- release/*)前面有6个空格的缩进,所以你需要给新增的- TerraformTest/*也加上同样的前缀空格。
修正后的完整脚本:
target_string=" - develop" replacement_string=" - TerraformTest/*" sed -i "/$target_string/a $replacement_string" test.txt
更灵活的方案(自动匹配缩进)
如果你不确定缩进的空格数,或者担心后续缩进可能变化,可以用sed的正则捕获功能,自动继承原行的缩进:
sed -i -E 's/^(\s*)- develop$/\1- develop\n\1- TerraformTest\/*/' test.txt
这个命令会捕获- develop行首的所有空白字符,然后在新增行时复用这些缩进,确保格式完全一致。
执行后你会得到符合要求的YAML:
trigger: branches: include: - develop - TerraformTest/* - release/* - rapid/* - Sprint/* - Unity/*
内容的提问来源于stack exchange,提问作者Muhammad_Bilal
相关产品推荐
相关产品推荐

