查找并输出匹配指定正则表达式的范围
Find and output range that match specified regex
我有以下结构的文件:
//-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*
脚本必须 return
//-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 标志一起使用,但也无法使其正常工作。
有没有办法用标准 bash utils 解决该程序?
您需要使用 -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-//
我有以下结构的文件:
//-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*
脚本必须 return
//-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 标志一起使用,但也无法使其正常工作。
有没有办法用标准 bash utils 解决该程序?
您需要使用 -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-//