我有一个文本文件,其中包含如下所示的条目。
tag1start text1 text2 text3 text4 tag1end .. .. tag1start text5 text6 text7 text8 tag1end
我只需要在tag1start tag1end的第一个集中更改条目
我尝试过使用" range"但它会影响两组。我如何仅将其限制在第一组?
/tag1start/,/tag1end/c\ Some other text1\ Some other text2\ Some other text3\ Some other text4\ Some other text5\ Some other text6\ tag1end
答案 0 :(得分:3)
sed '/tag1end/,$!{1,/tag1start/!s/\(.*\)/Some other \1\\/;}'
粗略翻译:在所有除之外,从tag1end到最后一行的部分(贪婪,是第一个tag1end之后的所有部分),执行以下操作:在所有中除从第1行到tag1start的部分,将foo
转换为Some other foo\
。
答案 1 :(得分:2)
考虑:
$ sed '/tag1end/,${p;d}; /tag1start/,/tag1end/{s/^/Some other /}' file
Some other tag1start
Some other text1
Some other text2
Some other text3
Some other text4
tag1end
..
..
tag1start
text5
text6
text7
text8
tag1end
/tag1end/,${p;d}
对于从匹配tag1end
的第一行到$
的范围内的所有行,按原样打印该行(p
)并从下一行重新开始( d
)。
/tag1start/,/tag1end/{s/^/Some other /}
如果我们尚未到达第一个tag1end
,我们只能使用此命令。如果我们尚未达到tag1end
并且我们在/tag1start/,/tag1end/
范围内,则执行花括号中的命令。您可以在这些大括号中添加您喜欢的任何sed
命令。