[英]Insert lines between two matching patterns using sed or awk
I have lines in text.txt as follows 我在text.txt中有如下几行
start:xfedfgrrg
vfefvrgvr
efefrg
end: abc
end : xyz
start:ewef
feefvef
frrfer
end:ccbf
start:e3frrf
f2erv
frf
end: ece
end: d32d2d
end: fff
I want to add few lines (let's say hello world) everytime patten "end:" matches. 我想在每一次patten“ end:”匹配项中添加几行(比方说你好世界)。 But ignore following occurrence of pattern "end:" untill a "start:" pattern matches again.
但是,请忽略以下出现的模式“结束:”,直到再次匹配“开始:”模式。
Required Output 所需输出
start:xfedfgrrg
vfefvrgvr
efefrg
hello world
end: abc
end : xyz
start:ewef
feefvef
frrfer
hello world
end:ccbf
start:e3frrf
f2erv
frf
hello world
end: ece
end: d32d2d
end: fff
Awk oneliner: Awk oneliner:
awk '/start:/{on=1} on&&/end:/{print "hello world"; on=0} {print}' file
which uses a variable "on" to mark when we're between the start/end blocks. 它使用变量“ on”来标记我们在开始/结束块之间的时间。
$ sed '/start/{x;s/.*/./;x};/end/{x;/^.$/{x;s/^/hello world\n/;x};s/^/./;x}' filename
start:xfedfgrrg
vfefvrgvr
efefrg
hello world
end: abc
end : xyz
start:ewef
feefvef
frrfer
hello world
end:ccbf
start:e3frrf
f2erv
frf
hello world
end: ece
end: d32d2d
end: fff
Explanations : 说明 :
like this 像这样
if (/start/)
HoldSpace = "."
if (/end/)
if (HoldSpace == ".") # just one /end/
add "hello world\n" to first
HoldSpace = HoldSpace + "." # if two /end/; HoldSpace is ".."
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.