0

我在 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

每次 patten "end:" 匹配时,我想添加几行(让我们打个招呼)。但忽略以下模式“end:”的出现,直到“start:”模式再次匹配。

所需输出

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
4

2 回答 2

3

awk oneliner:

awk '/start:/{on=1} on&&/end:/{print "hello world"; on=0} {print}' file

它使用变量“on”来标记我们何时处于开始/结束块之间。

于 2015-11-05T19:33:47.790 回答
0
$ 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

说明

像这样

if (/start/)
    HoldSpace = "."

if (/end/)
    if (HoldSpace == ".")  # just one /end/
        add "hello world\n" to first

    HoldSpace = HoldSpace + "."  # if two /end/; HoldSpace is ".."
于 2015-11-06T00:12:53.710 回答