我的文件具有以下结构:
//-BeginBlock-//
Any info with any lines quantity
//-01.02.2015 02:00:00-//
//-BeginBlock-//
Any info with any lines quantity
//-02.03.2015 00:06:00-//
等等......
现在,如何打印包含由脚本用户指定的正则表达式的块的内容?示例:对于文件
//-BeginBlock-//
qwerty 8567
Some
Info
In Block 1
//-01.02.2015 02:00:00-//
//-BeginBlock-//
dsdfh 9854
Some info in Block 2
//-02.02.2015 02:00:00-//
//-BeginBlock-//
dsdfh 9855 Some info in Block 3
//-03.02.2015 02:00:00-//
和正则表达式dsdfh 985*
脚本必须返回
//-BeginBlock-//
dsdfh 9854
Some info in Block 2
//-01.02.2015 02:00:00-//
//-BeginBlock-//
dsdfh 9855 Some info in Block 3
//-01.02.2015 02:00:00-//
甚至只是块的内容,由分隔符分割。
我发现范围可以通过sed -n '/\/\/-BeginBlock-\/\//I,/\/\/-/p' ~/.marks
获得
但我不知道如何让它按预期工作。此外,我尝试使用grep和-grep -Eizoa "\/\/-BeginBlock-\/\/" ~/.marks
之类的-zo标志,但也无法使其工作。
有没有办法用standart bash utils解决该程序?
答案 0 :(得分:1)
您需要使用-P
参数。
$ grep -ozP '(?s)[^\n]*//-BeginBlock-//[^\n]*(?:(?!//-).)*dsdfh 985.*?//-[^\n]*' file
//-BeginBlock-//
dsdfh 9854
Some info in Block 2
//-02.02.2015 02:00:00-//
//-BeginBlock-//
dsdfh 9855 Some info in Block 3
//-03.02.2015 02:00:00-//