我知道我可以在特定模式的上方和下方涂抹线条,例如this
现在我有一个问题,我想在一定的模式之前插线,但我不知道它有多远,例如:
Time 00:00:01
kkk
lll
aaa
...
Time 00:00:03
kkk
kkk
kkk
lll
lll
aaa
aaa
...
Time 00:00:04
kkk
lll
...
我的目标模式是aaa,另一种模式是"时间xx:xx:xx"我希望输出像这样
Time 00:00:01
aaa
Time 00:00:03
aaa
aaa
或
Time 00:00:01
aaa
Time 00:00:03
aaa
Time 00:00:03
aaa
我该怎么做?
答案 0 :(得分:4)
确切输出
awk '/^Time/{a=$0;x=0}/aaa/{print (x++?"":a"\n") $0}' file
Time 00:00:01
aaa
Time 00:00:03
aaa
aaa
或
Element.findall()
答案 1 :(得分:3)
您可以使用以下内容:
(Time[^\n]*|aaa)
https://regex101.com/r/cY8jN7/2
在grep
中使用同样的事情:
Time[^\n]*|aaa
编辑:这个正则表达式将替换除了你需要的所有东西,所以输出是正确的:
Time[^\n]*\n((?:(?!Time|aaa)[^\n]*(\n|$))*(?=Time|$))|(?<=\n)(?!Time|aaa)[^\n]+\n
答案 2 :(得分:2)
以下是在Perl中执行此操作的方法:
perl -ane '$t=$_ if /Time/; print $t,$_ if /aaa/' file
答案 3 :(得分:0)
使用grep非常简单:
$ grep -E 'Time |aaa' file
匹配器选择
-E, - extended-regexp 将PATTERN解释为扩展正则表达式(ERE,请参阅 下面)。 (-E由POSIX指定。)