加载中…
个人资料
Ying
Ying
  • 博客等级:
  • 博客积分:0
  • 博客访问:44,835
  • 关注人气:5
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
相关博文
推荐博文
谁看过这篇博文
加载中…
正文 字体大小:

Unix sed之四:选择性打印

(2014-07-10 13:53:31)
标签:

unix

sed打印

分类: UNIX/LINUX
 

本文,我们将会学习如何选择性的打印(其实,这里的打印是print,也就是输出到标准输出的意思),用到的示例文件是:

 
 
 
 
$ cat file
Gmail 10
Yahoo 20
Redif 18

1.打印所有内容

 
 
 
 
$ sed '' file
Gmail 10
Yahoo 20
Redif 18

一对单引号,没有任何参数即可

2.如何打印包含Gmail的那一行.(grep也可以实现这个功能)

 
 
 
 
 
$ sed '/Gmail/p' file
Gmail 10
Gmail 10
Yahoo 20
Redif 18

在斜线里面,我们指定正则匹配模式,p的意思呢,就是print,打印的意思,也就是打印包含Gmail这一行,但是我们看到Gmail打印了两次,为什么,因为sed的默认行为是在解析完一行之后就把他输出出来,也就是对于Gmail这一行,先执行p解析,解析完成后再默认打印一次,就打印了两次,而其他的,没有命令解析,直接读入完成后输出即可。

如果得到期望的结果呢?

 
 
$ sed -n '/Gmail/p' file
Gmail 10

-n参数会取消sed的默认打印行为,所以就ok了

 

3.删除包含Gmail的那一行。(grep -v也有同样的效果)

 
 
 
$ sed  '/Gmail/d' file
Yahoo 20
Redif 18

d就是delete的意思,不多解释,

同样,要想删除某一指定的行

 
 
 
$ sed '1d' file
Yahoo 20
Redif 18

4.打印直到模式匹配,这里我们从头一直打印到Yahoo

 
 
 
$ sed  '/Yahoo/q' file
Gmail 10
Yahoo 20

q就是quit的意思,这条命令就是对于前面的行都没啥可解析的,执行默认的打印即可,一到碰到Yahoo这一行,打印完成,就停止,退出,因此,就是上面的了

 

到此,我们一直在学习基于一个条件取一行或多行,现在,我们来学习打印指定范围行

使用的示例文件如下:

 
 
 
 
 
 
 
$ cat file
Gmail 10
Yahoo 20
Redif 18
Inbox 15
Live  23
Hotml 09

5.打印前三行

 
 
 
 
$ sed -n '1,3p' file
Gmail 10
Yahoo 20
Redif 18

-n先取消默认打印,然后1,3指定行范围,p表示打印,你想一下我们前面的q命令,就知道下面这个命令效果是一样的

 
 
 
 
$ sed '3q' file
Gmail 10
Yahoo 20
Redif 18

执行默认打印,到第三行的时候退出

6.通过模式指定范围,这里我打印从Yahoo到Live之间的行,包括本身

 
 
 
 
$ sed -n '/Yahoo/,/Live/p' file
Yahoo 20
Redif 18
Inbox 15
Live  23

不用多解释了

7.从指定模式到文件尾部,这里是从Redif到文件尾

 
 
 
 
 
$ sed -n '/Redif/,$p' file
Redif 18
Inbox 15
Live  23
Hotml 09

8.从开头到匹配模式

 
 
 
$ sed -n '1,/Inbox/p' file
Gmail 10
Yahoo 20
Redif 18
Inbox 15

对于数字不需要斜线包围,对于匹配需要斜线.就这样..

0

阅读 评论 收藏 转载 喜欢 打印举报/Report
  • 评论加载中,请稍候...
发评论

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

      

    新浪BLOG意见反馈留言板 电话:4000520066 提示音后按1键(按当地市话标准计费) 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有