gpt4 book ai didi

regex - 查找并输出与指定正则表达式匹配的范围

转载 作者:太空宇宙 更新时间:2023-11-04 05:02:27 26 4
gpt4 key购买 nike

我的文件具有以下结构:

//-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-//

等等...

现在,如何打印由脚本用户指定的包含正则表达式的 block 的内容?示例:对于文件

//-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-//

或者甚至只是 block 的内容,由分隔符分隔。我发现范围可以通过 sed -n '/\/\/-BeginBlock-\/\//I,/\/\/-/p' ~/.marks 获得但我不知道如何让它按预期工作。我还尝试将 grep 与 -zo 标志一起使用,例如 grep -Eizoa "\/\/-BeginBlock-\/\/" ~/.marks但也无法让它发挥作用。有没有办法用标准的 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-//

关于regex - 查找并输出与指定正则表达式匹配的范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28269597/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com