Regex 用字符串替换行或创建新的行(如果不存在)-sed

Regex 用字符串替换行或创建新的行(如果不存在)-sed,regex,bash,sed,Regex,Bash,Sed,如果某个块中不存在“DUMP=”行,我想替换该行或添加新行。当block define by从[text]到下一个[text]时,例如: [name] sometext=... moretext=... DUMP= moretext2=... [name2] ... 对于替换现有线路,我将执行以下操作: sed -i '/^\['name'\]$/,/^\[/!b /DUMP=/cDUMP=example' $file 我不知道在一行或两行中是否可能,但如

如果某个块中不存在“DUMP=”行,我想替换该行或添加新行。当block define by从[text]到下一个[text]时,例如:

[name]
  sometext=...
  moretext=...
  DUMP=
  moretext2=...    
[name2]
  ...
对于替换现有线路,我将执行以下操作:

sed -i '/^\['name'\]$/,/^\[/!b
    /DUMP=/cDUMP=example' $file
我不知道在一行或两行中是否可能,但如何添加添加DUMP=。。。如果它不存在于那个街区

例1:

file1.txt:

sed'/^\['name'\]$/,/^\[/!b /DUMP=/cDUMP=example“file1.txt输出:

例2:

file1.txt:

sed'/^\['name'\]$/,/^\[/!b /DUMP=/cDUMP=示例 在这里,我们做了以下工作:

变量s检查是否找到了正确的块 变量f检查是否在正确的块中找到条目DUMP= /^\[/&&/$/&&s&&!f{print DUMP=example;s=0}::如果我们输入了一个新块,并且前一个块是正确的块,并且该块没有DUMP=entry f==0,那么就写一个。 s&&/^*DUMP=/{$0=DUMP=example;f=1}::如果我们在正确的块s==1中,并且我们找到一个DUMP=entry,请更新它。
你能提供一些示例IO吗?这些假设是错误的,空格是允许的。我只是重新编辑我的Q,这样它会更清晰。而且结果不会影响[name2].@Nir您的问题不清楚。从这一点上,我知道您希望更新所有转储,但您的评论仅表示第一个转储,或仅表示特定块中的转储。您希望何时添加转储。@Nir我已更新了我的最佳理解答案。
[name]
  A=text1
  B=text2
  DUMP=x
  C=text3

[name2]
  A=text12
  B=text22
  DUMP=x2
  C=text32
[name]
  A=text1
  B=text2
  DUMP=example
  C=text3

[name2]
  A=text12
  B=text22
  DUMP=x2
  C=text32
[name]
  A=text1
  B=text2
  C=text3

[name2]
  A=text12
  B=text22
  DUMP=x2
  C=text32
[name]
  A=text1
  B=text2
  C=text3
  DUMP=example

[name2]
  A=text12
  B=text22
  DUMP=x2
  C=text32
awk '/^\[/&&/]$/&&s&&!f{print "  DUMP=example"; s=0}
     $0 ~ "^\["blockname"]$"{s=1;f=0}
     s&&/^ *DUMP=/{$0="  DUMP=example"; f=1}
     1
     END{if(s&&!f)  print "  DUMP=example"; } blockname="name" <file>