LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1201|回复: 4

用sed进行查询时的问题

[复制链接]
发表于 2007-8-13 14:49:06 | 显示全部楼层 |阅读模式
教程上有一个关于使用模式和行号进行查询的文章,实例文件data内容为:
$ more data
48      dec     3bc1997 lpas    68.00   lvx2a   138
219     sept    5ap1996 usp     65.00   lvx2c   189
483     nov     7pl1998 usp     37.00   kvm9d   644
216     Sept    3zl1998 usp     86.00   kvm9e   234
484     Jan     380sdf1 usp     78.00   deiv    344
230     nov     19dfd9d abd     87.00   sdiv    230
现在只查询第四行
$ sed -n '2,/usp/'p data

219     sept    5ap1996 usp     65.00   lvx2c   189
483     nov     7pl1998 usp     37.00   kvm9d   644
显示的结果是第二和第三行,本来不是应该只显示第二行的吗?不解中...
发表于 2007-8-13 15:13:24 | 显示全部楼层
"2,/usp/" becomes a range pattern, not just for line 2. If just for line 2, you can use '2{/usp/p}'. works but does not make a whole lot sense...
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-8-13 15:45:33 | 显示全部楼层
谢谢,你说的是对的.难道我看的这个教程有误?我是按照上面写的操作的.郁闷.看来得多参考其他文档才是,刚才学习打印行号,也碰到同样问题,现在要打印匹配"usp"的行,运行:

$ sed -e '/usp/=' data
48      dec     3bc1997 lpas    68.00   lvx2a   138
2
219     sept    5ap1996 usp     65.00   lvx2c   189
3
483     nov     7pl1998 usp     37.00   kvm9d   644
4
216     Sept    3zl1998 usp     86.00   kvm9e   234
5
484     Jan     380sdf1 usp     78.00   deiv    344
230     nov     19dfd9d abd     87.00   sdiv    230

结果把最后一行不包括usp的也打印出来了
回复 支持 反对

使用道具 举报

发表于 2007-12-6 23:41:37 | 显示全部楼层
$ sed -e '/usp/=' data
这样写的意思是所有都打印出来,包括每行的行号

你的意思可以分为两步
1:只打印你要找的行 sed -n -e '/usp/p' data
2:输出行号  sed -n -e '/usp/p;=' data
(或者sed -n -e '/usp/p' -e '/usp/=' data)

-n是必须的,只输出符合条件的行

具体看一下man吧
回复 支持 反对

使用道具 举报

发表于 2007-12-9 18:04:24 | 显示全部楼层
Post by yongjian;1747762
"2,/usp/" becomes a range pattern, not just for line 2. If just for line 2, you can use '2{/usp/p}'. works but does not make a whole lot sense...

说的很对,有学到了一招
回复 支持 反对

使用道具 举报

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

本版积分规则

快速回复 返回顶部 返回列表