免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 2737 | 回复: 12
打印 上一主题 下一主题

求助:如何匹配文件中特定开始到特定结束文字并输出[1.27更新] [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-01-25 22:22 |只看该作者 |倒序浏览
RT
文本文件,匹配例子:
abc
1234
4567
890
...
空行

def
1234
4567
890
...
空行

现在想匹配以abc开始的行到最近的一个空行之间的文本(不包括空行),并输出。想了一个awk找到指定模式的行然后打印后续x行的脚本,如何指定到最近的一个空行呢,因为行数不定。
各位大侠们指点一下,多谢了。

一个新的问题:如果要匹配abc或者def开头最近的一个空行之间的文本,再一行代码中怎么实现呢,用||分割好像不行啊。

再来个新问题:对于sed 后的输出流,我想要再次sed匹配后输出,现在的问题是:
sed A | sed B  myfile
sed A | sed C  myfile
sed A | sed D  myfile
其中sed A的输出能否暂时保存起来,然后依次重定向到后续sed处理 ,每次都做太不好了。

另外,对sed的结果中,一些数据通过另一个文件中对应的记录来作做注释:
如sed的结果:
this is a
i am b
she is c
在另一个文件中有对a b c 的注释:
a A
b B
c C
如何将sed结果中追加注释成:this is a (A),暂时想到将sed处理结果重定向到临时文件,然后循环读取两个文件匹配处理,再打印,感觉不好,各位大侠们有没有好的办法,不用临时文件的。
谢谢了。

[ 本帖最后由 玄铁寒冰 于 2007-1-27 22:33 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2007-01-25 22:31 |只看该作者
  1. sed -n '/abc/,/^$/'p urfile
复制代码

论坛徽章:
0
3 [报告]
发表于 2007-01-25 22:34 |只看该作者
or
awk '/^abc$/,/^[ \t]*$/'   file

论坛徽章:
0
4 [报告]
发表于 2007-01-25 23:01 |只看该作者
谢谢楼上两位。
另外,哪位给个perl的解决办法,学习一下。

论坛徽章:
0
5 [报告]
发表于 2007-01-25 23:15 |只看该作者
应该有个a2p的程序,可以把awk转为相应的perl程序
很好用的。不妨试试看。转完了你就可以看到perl是如何做的

论坛徽章:
0
6 [报告]
发表于 2007-01-26 23:46 |只看该作者
一个新的问题:如果要匹配abc或者def开头最近的一个空行之间的文本,再一行代码中怎么实现呢,用||分割好像不行啊。

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
7 [报告]
发表于 2007-01-27 00:25 |只看该作者
perl -ne '$f=1 if /^abc|^def/;$f=0 if /^$/;print $_ if $f==1'

论坛徽章:
0
8 [报告]
发表于 2007-01-27 01:23 |只看该作者
perl -ne 'print if /abc|def/../^$/'
sed -n '/abc\|def/,/^$/p'

论坛徽章:
0
9 [报告]
发表于 2007-01-27 10:13 |只看该作者
原帖由 lovesaka 于 2007-1-27 01:23 发表
perl -ne 'print if /abc|def/../^$/'
sed -n '/abc\|def/,/^$/p'

赞!

论坛徽章:
0
10 [报告]
发表于 2007-01-27 22:35 |只看该作者
sed -n '/abc\|def/,/^$/p'
这里为什么要转义 | 呢,匹配是会做两次分析么?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP