shell 基于匹配字符串在现有代码块中追加字符串

a6b3iqyw  于 2023-03-30  发布在  Shell
关注(0)|答案(2)|浏览(141)

我有下面的代码块在tf文件。

variable "dev_team" {
  default = [
    "dev/global",
    "dev/software",
  ]
}

我想在右方括号上方添加一个字符串(在文件中找到匹配dev之后)。输入字符串eg是dev/hardware。输出应如下所示。

variable "dev_team" {
  default = [
    "dev/global",
    "dev/software",
    "dev/hardware",
  ]
}

注意:“dev/software”并不总是最后一个项目,它可以是任何字符串(“dev/”),但我只是想在新行的结束方括号前添加新的字符串。
我尝试使用sed命令来匹配使用sed的具有dev字符串的代码块,并尝试附加新字符串,但它不按要求工作,而是在每个dev匹配之前添加字符串。

sed -ie 's/dev/hardware &/' test.tf
vfh0ocws

vfh0ocws1#

使用任意awk:

$ awk -v old='"dev/' -v new='"dev/hardware",' '
    s = index($0,old) {
        indent = substr($0,1,s-1)
        f = 1
    }
    f && /]/ {
        print indent new
        f = 0
    }
    { print }
' test.tf
variable "dev_team" {
  default = [
    "dev/global",
    "dev/software",
    "dev/hardware",
  ]
}
b1zrtrql

b1zrtrql2#

使用GNU AWK

awk -v st="hardware" '
    /dev\//{new=gensub(/([^\/]*\/)([^"]*)(",)/,"\\1"st"\\3",1)} 
    /\]/{print new}1
' file

variable "dev_team" {
  default = [
    "dev/global",
    "dev/software",
    "dev/hardware",
  ]
}

相关问题