仅在满足2个搜索条件时才附加行

时间:2013-08-05 04:03:22

标签: bash sed

我想用sed完成以下操作 1.找到[sometext] 完全匹配

的第一次出现

2.然后从那里开始搜索stuID = 10 完全匹配

3.然后在[sometext]

下为第一次出现的stuID附加行checkID = 4

注意:checkID的值会根据[sometext]改变,这就是为什么我只需要为第一次出现添加行

我的尝试

  

sed'/ [sometext] / {s / stuID = 10 / a \ checkID = 4/1}'file.txt

     

sed's / [sometext] / {s / stuID = 10 / a \ checkID = 4/1}'file.txt

     

sed'/ [sometext] / {s / stuID = 10 / a \ checkID = 4 / g}'file.txt

{只是为了查看命令是否有效,如果我没有指定添加新行的次数。

  

我添加了\]来逃避[]

结果

1.命令执行但在file.txt

中的任何地方都没有添加checkID = 4

2.Error:sed:-e expression#1,char 18:multiple g' options to s'命令 暗示语法本身是错误的

3.命令执行但在file.txt

中的任何地方都没有添加checkID = 4

当我说执行时我的意思是没有错误信息

File.txt

[sometext]
blah blah blah
blah blah blah
stuID = 10 
blah blah blah
blah blah blah
[Anothertext]
blah blah blah
blah blah blah
stuID = 5
blah blah blah
blah blah blah

我想要它 File.txt

[sometext]
blah blah blah
blah blah blah
stuID = 10 
checkID=4 
blah blah blah
blah blah blah
[Anothertext]
blah blah blah
blah blah blah
stuID = 5
checkID=6
blah blah blah
blah blah blah

我现在已经完全厌倦了。希望有人可以帮助我

此致

1 个答案:

答案 0 :(得分:0)

这可能适合你(GNU sed):

sed -e '/\[sometext\]/,/stuID = 10/{/stuID = 10/{a\checkID = 4' -e ':a;n;ba}}' file

这将找到2个搜索字符串之间的范围并附加所需的文本。最后,文件的其余部分将被传递。