Regex 用字符串替换行或创建新的行(如果不存在)-sed
如果某个块中不存在“DUMP=”行,我想替换该行或添加新行。当block define by从[text]到下一个[text]时,例如: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 我不知道在一行或两行中是否可能,但如
[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>