如何在图案上方涂抹未知距离线

时间:2015-05-08 02:20:51

标签: regex perl awk

很抱歉再次编辑问题。我发现之前我没有清楚地问过我的问题 我昨天问了a question,但我今天发现了另一个问题/。\
这是我的档案:

Time 00:00:01
kkk
lll
ccc
aaa: 88
...
Time 00:00:03
jjj
kkk
lll
ccc
aaa: 89
ooo
bbb
aaa
kkk
lll
ccc
aaa: 90
...
Time 00:00:04
kkk
lll
...

这是我想要的输出:

Time 00:00:01
kkk
lll
ccc
aaa: 88
Time 00:00:03
kkk
lll
ccc
aaa: 89
Time 00:00:03
kkk
lll
ccc
aaa: 90

上次我正在寻找一条线,另一条线在它上面。这次我正在寻找具有多行的模式:

kkk
lll
ccc
aaa: /any thing here/

和一行

Time /any thing here/

从我昨天提出的问题来看,我试过了

awk '/Time/{a=$0}/kkk\nlll\nccc\naaa/{print a"\n"$0}' file

perl -ane '$t=$_ if /Time/; print $t,$_ if /kkk\nlll\nccc\naaa/' test2

pcregrep.exe -M 'kkk.*(\n|.)lll.*(\n|.)ccc.*(\n|.)*aaa' test2
来自this

但他们没有工作或输出不是我想要的。

我发现像this这样的线程正在讨论状态机,但它很复杂,因为我有几行匹配
有什么建议可以轻易解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

(这个答案是为这个问题的第一个版本而写的。)

$ awk -v RS="Time" -v p="\nkkk\nlll\nccc\naaa" '$0~p {print "Time",$1,p;}' file
Time 00:00:01 
kkk
lll
ccc
aaa
Time 00:00:03 
kkk
lll
ccc
aaa

(这可能需要GNU awk。)