如何向文件添加新行并匹配prev行的缩进

时间:2016-04-21 23:04:10

标签: shell sed scripting

我有:

globalweather:
    name: 'globalweather:1.0.0'

我试过了: sed -i '' "s/^\( *\)name: '$api_name'$/&\n\1\$ref: $1/" $2

但我得到了:

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

我想:

globalweather:
   $ref: globalweather_1.0.0.yaml 

有人可以帮助我解决我失踪的问题吗?

2 个答案:

答案 0 :(得分:5)

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

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

故障:

s/
  ^      # Start of string
  \( *\) # Capture 0 or more spaces
  something
  $      # End of string
/
  &      # Full matched string
  \1     # Captured spaces
  something else
/

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

答案 1 :(得分:0)

@andlrc,谢谢你的建议,我明白了它,我使用的sed命令是:

sed -i '' "s/^\( *\)name: '$api_name'$/\1\$ref: $1/" $2