免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1693 | 回复: 9

求教一个正则匹配的问题 [复制链接]

论坛徽章:
0
发表于 2014-04-25 17:58 |显示全部楼层
目标文件为:
       
        //1----,QWORD1=1(VFYPASS=x, PVPASS_BYTE=x)
        //1.1----,scan from start -> rdsram
        for(i=0;i<40;i=i+1)
        begin
                #(20*i+20);
                cmdsuspend;
                resume;
                #300;
                if(EMOSC_EN)
                begin
                        enter_reset;
                        @(negedge EMOSC_EN);
                end

        end
        //1.2----,scan from pv0 rdsram ->pv1 rdsram
        test_cnt=2;
        for(i=0;i<50;i=i+1)
        begin
                write_enable;
                page_program(24'h0010ff,8'h44,8'hff,2);
                @(ADDINT_REF==24'h0010f4)
                #(20*i);
                cmdsuspend;
                begin
                enter_reset;
                @(negedge EMOSC_EN);
                end

        end               
想要改为:               
        //1----,QWORD1=1(VFYPASS=x, PVPASS_BYTE=x)
        //1.1----,scan from start -> rdsram
        for(i=0;i<40;i=i+1)
        begin
                #(20*i+20);
        end
        //1.2----,scan from pv0 rdsram ->pv1 rdsram
        test_cnt=2;
        for(i=0;i<50;i=i+1)
        begin
                write_enable;
                page_program(24'h0010ff,8'h44,8'hff,2);
                @(ADDINT_REF==24'h0010f4)
                #(20*i);
        end
实际上就是要将cmdsuspend之后到end之间的所有行删除掉,并且这之间的行数不固定啊,不知道怎么写了?

论坛徽章:
3
CU十二周年纪念徽章
日期:2013-10-24 15:41:34子鼠
日期:2013-12-14 14:57:19射手座
日期:2014-04-25 21:23:23
发表于 2014-04-25 21:22 |显示全部楼层
  1. perl -lne 'print unless/^\s*cmdsuspend/../^\s*end/'  file
复制代码
回复 1# frankhyk


   

论坛徽章:
0
发表于 2014-04-28 10:38 |显示全部楼层
先感谢一下,请问中间的匹配符“/../”该怎么理解呢?它能匹配多行吗?唉,没有找着这个这个操作符的这种用法的介绍。不理解中。。




回复 2# mcshell


   

论坛徽章:
3
CU十二周年纪念徽章
日期:2013-10-24 15:41:34子鼠
日期:2013-12-14 14:57:19射手座
日期:2014-04-25 21:23:23
发表于 2014-04-28 10:55 |显示全部楼层
本帖最后由 mcshell 于 2014-04-28 10:56 编辑

回复 3# frankhyk
就是匹配多行的..
还有一种方法 修改$/的默认值,
用正则去完全匹配多行:wink:

论坛徽章:
0
发表于 2014-04-28 11:02 |显示全部楼层
嗯,local $/;输入记录分隔符这种做法我看到过,第一次看到“/../”也能匹配多行,看来我还得多多看书喽!



回复 4# mcshell


   

论坛徽章:
46
15-16赛季CBA联赛之四川
日期:2018-03-27 11:59:132015年亚洲杯之沙特阿拉伯
日期:2015-04-11 17:31:45天蝎座
日期:2015-03-25 16:56:49双鱼座
日期:2015-03-25 16:56:30摩羯座
日期:2015-03-25 16:56:09巳蛇
日期:2015-03-25 16:55:30卯兔
日期:2015-03-25 16:54:29子鼠
日期:2015-03-25 16:53:59申猴
日期:2015-03-25 16:53:29寅虎
日期:2015-03-25 16:52:29羊年新春福章
日期:2015-03-25 16:51:212015亚冠之布里斯班狮吼
日期:2015-07-13 10:44:56
发表于 2014-04-28 11:09 |显示全部楼层
回复 5# frankhyk


    那是两个正则匹配中间跟一个 range(..) 操作符
In scalar context, ".." returns a boolean value. The operator is bistable, like a flip-flop, and emulates the line-range (comma) operator of sed, awk, and various editors. Each


具体看 perldoc -f ..

论坛徽章:
0
发表于 2014-04-28 11:26 |显示全部楼层
哈哈,谢谢版主提醒啊!


回复 6# zhlong8


   

论坛徽章:
0
发表于 2014-04-28 15:59 |显示全部楼层
再请教一下,如果要去掉的那几行中含有多个end字符串,这样范围操作符右边的表达式/^\s*end/就不能匹配到我要找到的位置了,这种情况该怎么解决好呢?

例如要删掉文本中红色的部分:

        //1----,QWORD1=1(VFYPASS=x, PVPASS_BYTE=x)
        //1.1----,scan from start -> rdsram
        for(i=0;i<40;i=i+1)
        begin
                #(20*i+20);
                cmdsuspend;
                begin
                        aaaaaaa;
                        bbbbbbb;
                end
                resume;
                #300;
                if(EMOSC_EN)
                begin
                        enter_reset;
                        @(negedge EMOSC_EN);
                end

        end




回复 4# mcshell


   

论坛徽章:
3
CU十二周年纪念徽章
日期:2013-10-24 15:41:34子鼠
日期:2013-12-14 14:57:19射手座
日期:2014-04-25 21:23:23
发表于 2014-04-28 16:50 |显示全部楼层
  1. perl -pe 'BEGIN{$/=""};s/(\s*cmdsuspend;[\s\S]+?end(?=\s*end))//g;' f
复制代码
回复 8# frankhyk


   

论坛徽章:
0
发表于 2014-04-28 17:27 |显示全部楼层
再次感谢,受教了!


回复 9# mcshell


   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP