免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: li_haigang
打印 上一主题 下一主题

sed多行匹配的疑问 [复制链接]

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
11 [报告]
发表于 2008-08-05 11:14 |只看该作者
这个用sed可能有点复杂,我的思路:
首先
:a $!{N;ba;};
装入全部文章,
然后使用Hold sapce配合,用循环挨个输出所有匹配

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
12 [报告]
发表于 2008-08-05 11:19 |只看该作者
原帖由 cjaizss 于 2008-8-5 11:14 发表
这个用sed可能有点复杂,我的思路:
首先
:a $!{N;ba;};
装入全部文章,
然后使用Hold sapce配合,用循环挨个输出所有匹配

因为regex的贪婪问题,所以我也没写出来。

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
13 [报告]
发表于 2008-08-05 11:29 |只看该作者

  1. sed -nr ':a $!{N;ba;};:b h;s/(Owner\nand\nOperator\nGuide[^\n]*).*/\1/;s/(.*\n|^)([^\n]*Owner\nand\nOperator\nGuide[^\n]*)/\2/p;x;s/([^\n]*Owner\nand\nOperator\nGuide[^\n]*)(.*)/\2/;tb'
复制代码

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
14 [报告]
发表于 2008-08-05 13:08 |只看该作者
换种思路的话..........

  1. #!/bin/sed -nrf
  2. /Owner$/ {
  3.         N
  4.         /\nand$/ {
  5.                 N
  6.                 /\nOperator$/ {
  7.                         N
  8.                         /\nGuide[^\n]*$/p
  9.                 }
  10.         }
  11. }
复制代码

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
15 [报告]
发表于 2008-08-05 13:16 |只看该作者

回复 #14 cjaizss 的帖子

这可以解决样本数据。

Owner
foo and
bar Oprator
Guide
这个就不行了。

我想要看LZ要做什么,然后才有具体的解决办法。

[ 本帖最后由 blackold 于 2008-8-5 13:20 编辑 ]

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
16 [报告]
发表于 2008-08-05 13:22 |只看该作者
原帖由 blackold 于 2008-8-5 13:16 发表
这可以解决样本数据。

Owner
foo and
bar Oprator
Guide
这个就不行了。

我想要看LZ要做什么,然后才有具体的解决办法。

因为我看到/Owner\nand\nOperator\nGuide/,所以我所理解的LZ的需要中,这个例子应视为不匹配。

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
17 [报告]
发表于 2008-08-05 13:29 |只看该作者

回复 #16 cjaizss 的帖子

嗯,有理。你是对的,我说的不对。

[ 本帖最后由 blackold 于 2008-8-5 14:04 编辑 ]

论坛徽章:
3
CU大牛徽章
日期:2013-03-13 15:29:07CU大牛徽章
日期:2013-03-13 15:29:49CU大牛徽章
日期:2013-03-13 15:30:19
18 [报告]
发表于 2008-08-05 15:01 |只看该作者
原帖由 cjaizss 于 2008-8-5 13:08 发表
换种思路的话..........

#!/bin/sed -nrf
/Owner$/ {
        N
        /\nand$/ {
                N
                /\nOperator$/ {
                        N
                        /\nGui ...



简单明了..

论坛徽章:
0
19 [报告]
发表于 2008-08-05 16:34 |只看该作者

回复 #16 cjaizss 的帖子

下次尽量将问题描述的更清楚一些。您的解决方法就是我想要的。

论坛徽章:
0
20 [报告]
发表于 2008-08-06 08:01 |只看该作者

回复 #14 cjaizss 的帖子

如果中间在Owner和Guide之间的两行任意(不是必须匹配某些内容),应该可以使用以下sed脚本吧?

/Owner/{
N
        /\n.*/{
        N
                /\n.*/{
                N
                        /\nGuide/p
                }
        }
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP