Shell 如何向文件中添加新行并匹配上一行的缩进

Shell 如何向文件中添加新行并匹配上一行的缩进,shell,sed,scripting,Shell,Sed,Scripting,我有: 我试过: sed-i''s/^\(*\)名称:'$api\u name'$/&\n\1\$ref:$1/“$2 但我得到了: globalweather: name: 'globalweather:1.0.0' 我想: globalweather: name: 'globalweather:1.0.0'n $ref: globalweather_1.0.0.yaml 有人能帮我弄清楚我遗漏了什么吗 您可以捕获缩进,然后使用替换插入缩进: globalweath

我有:

我试过:
sed-i''s/^\(*\)名称:'$api\u name'$/&\n\1\$ref:$1/“$2

但我得到了:

globalweather:
    name: 'globalweather:1.0.0'
我想:

globalweather:
    name: 'globalweather:1.0.0'n    $ref: globalweather_1.0.0.yaml 

有人能帮我弄清楚我遗漏了什么吗

您可以捕获缩进,然后使用替换插入缩进:

globalweather:
   $ref: globalweather_1.0.0.yaml 
细分:

sed 's/^\( *\)something$/&\n\1something else/'

但是使用
a
fter命令可能有一个更优雅的解决方案。

您可以捕获缩进,然后使用替换插入它:

globalweather:
   $ref: globalweather_1.0.0.yaml 
细分:

sed 's/^\( *\)something$/&\n\1something else/'

但是使用
a
fter命令可能会有一个更优雅的解决方案。

@andlrc,谢谢你的建议,我成功了,我使用的sed命令是:


sed-i''s/^\(*\)name:'$api\u name'$/\1\$ref:$1/“$2

@感谢您的建议,我已经成功了,我使用的sed命令是:


sed-i''s/^\(*\)name:'$api\u name'$/\1\$ref:$1/“$2

我认为使用
a
不可能更改插入的内容,因此您的解决方案是我能想到的唯一一个解决方案。@LRC感谢您的回复,我实际上正在尝试通过添加另一行来编辑yaml文件。以下是我根据您的建议使用的内容:
sed-i''s/^\(*\)name:'$api\u name'$/&\n\1\$ref:$1/“$2
但我得到:`globalweather:name:`globalweather:1.0.0'n$ref:globalweather\u 1.0.0.yaml`我想要:`globalweather:$ref:globalweather\u 1.0.0.yaml`我错过了什么?我想用
a
不可能更改你插入的内容,所以你的解决方案是我能想到的唯一一个解决方案。@andlrc谢谢你的回复,我实际上是想通过添加另一行来编辑yaml文件。以下是我根据您的建议使用的内容:
sed-i''s/^\(*\)name:'$api\u name'$/&\n\1\$ref:$1/“$2
但是我得到了:`globalweather:name:`globalweather:1.0.0'n$ref:globalweather\u 1.0.0.yaml`i want:`globalweather:$ref:globalweather\u 1.0.0.yaml`我错过了什么?替换字符串中的
&
被转换为“整个匹配字符串”。然后你要把这个字符串的一部分加到它上面。这是故意的吗?根据您的预期输出,它似乎不是。替换字符串中的
&
被转换为“整个匹配字符串”。然后你要把这个字符串的一部分加到它上面。这是故意的吗?根据您的预期输出,它似乎不是。