本原创文章属于《Linux大棚》博客,博客地址为http://roclinux.cn。文章作者为rocrocket。

为了防止某些网站的恶性转载,特在每篇文章前加入此信息,还望读者体谅。

===

[正文开始]

上文接:《sed的流艺术之一》-linux命令五分钟系列之二十一

5 sed中有选项么?有没有什么比较常用的?

sed最主要的就是command部分,把这部分玩转了,你就已经很厉害了,而玩转这部分的前提是玩转正则表达式。尽管如此,sed的选项部分的-n选项仍然是非常重要,理解了它,对于你提高sed水平也是至关重要。

前面提到,sed会将模式空间里的行经过处理后输出到标准输出,这是默认的处理方式。就是说,除非你使用d命令来删除此行,否则它无论变成什么样子,无论它被替换成什么形状,它都会多多少少被输出到屏幕上。前面的例子可以证明这一切。你不信?给你个最能说明问题的例子:

[rocrocket@rocrocket programming]$ cat roc.txt
1
2
3
4
5
[rocrocket@rocrocket programming]$ sed ‘/4/p’ roc.txt
1
2
3
4
4
5

看,除了所有的原始内容都被输出来了,而且含有字符4的行被重复输出了一遍。这就是sed的工作原理,它会不问青红皂白的先把原始行输出来,然后再执行后面的动作,在这里我们设定了p,表示打印此行。这种输出结果不是我们想要的,我们其实想要的是只输出含有4的行。

这时,如果你使用了-n选项,你会发现,结果如你所愿了:

[rocrocket@rocrocket programming]$ sed -n ‘/4/p’ roc.txt
4

选项-n告诉sed,除非是明确表明要输出的行,否则不要给我胡乱输出。(这回你知道-n的厉害了吧^_^)

-n一般会和-p配合使用,意思是说输出那些发生变化的行。

6 command部分感觉很复杂,能给稍微总结一下么?

command部分是这样,可以分为两部分,一部分是确定范围部分,一部分是处理方式部分。

确定范围部分可以分为两种方式:

1 指定行数:例如3,5表示第3、第4和第5行;5,$表示第5行至最后一行;

2 用模式匹配进行指定:例如/^[^dD]/表示匹配行首不是以d或D开头的行等等。

处理方式部分呢,有很多命令可用,介绍几个最常用的吧:

d:表示删除行

p:打印该行

r:读取指定文件的内容

w:写入指定文件

a\:在下面插入新行新内容

7 再举几个例子吧,给点经典的sed应用。

例一 显示test文件的第10到20行:sed -n ‘10,20p’ test

例二 将所有以d或D开头的行的所有小写x变为大写X:sed ‘/^[dD]/s/x/X/g’ test

例三 删除每行最后的两个字符:sed ‘s/..$//’ test

(有人会问用sed ‘/..$/d’ test为什么不行? 这是因为/..$/表示匹配所有末尾含有两个字符的行,然后删除这样的行,显然这是错误的)

例四 删除每一行的前两个字符:sed ‘s/..//’ test

未完待续:《sed的流艺术之三》-linux命令五分钟系列之二十三

《sed的流艺术之二》-linux命令五分钟系列之二十二的更多相关文章

  1. 《sed的流艺术之四》-linux命令五分钟系列之二十四

    本原创文章属于<Linux大棚>博客,博客地址为http://roclinux.cn.文章作者为rocrocket. 为了防止某些网站的恶性转载,特在每篇文章前加入此信息,还望读者体谅. ...

  2. 《sed的流艺术之三》-linux命令五分钟系列之二十三

    本原创文章属于<Linux大棚>博客,博客地址为http://roclinux.cn.文章作者为rocrocket. 为了防止某些网站的恶性转载,特在每篇文章前加入此信息,还望读者体谅. ...

  3. 《sed的流艺术之一》-linux命令五分钟系列之二十一

    本原创文章属于<Linux大棚>博客,博客地址为http://roclinux.cn.文章作者为rocrocket. 为了防止某些网站的恶性转载,特在每篇文章前加入此信息,还望读者体谅. ...

  4. 《paste命令》-linux命令五分钟系列之二十

    本原创文章属于<Linux大棚>博客,博客地址为http://roclinux.cn.文章作者为rocrocket. 为了防止某些网站的恶性转载,特在每篇文章前加入此信息,还望读者体谅. ...

  5. 《vi中的替换艺术》-linux命令五分钟系列之十一

    vi方面的内容不知道分类到哪里好,就放到<Linux命令五分钟系列>里吧! 今天编程,关于栈的一个小例子,其间我需要把”S.”替换为”S->”(替换不包括双引号). 其实这个不难,不 ...

  6. 《sort帮你排序》-linux命令五分钟系列之二十六

    本原创文章属于<Linux大棚>博客,博客地址为http://roclinux.cn.文章作者为rocrocket. 为了防止某些网站的恶性转载,特在每篇文章前加入此信息,还望读者体谅. ...

  7. 《gzip命令》-linux命令五分钟系列之七

    本原创文章属于<Linux大棚>博客. 博客地址为http://roclinux.cn. 文章作者为roc 希望您能通过捐款的方式支持Linux大棚博客的运行和发展.请见“关于捐款” == ...

  8. 《作业控制系列》-“linux命令五分钟系列”之十

    本原创文章属于<Linux大棚>博客. 博客地址为http://roclinux.cn. 文章作者为roc 希望您能通过捐款的方式支持Linux大棚博客的运行和发展.请见“关于捐款” == ...

  9. 《tr命令-优化版》-linux命令五分钟系列之二十五

    本原创文章属于<Linux大棚>博客,博客地址为http://roclinux.cn.文章作者为rocrocket. 为了防止某些网站的恶性转载,特在每篇文章前加入此信息,还望读者体谅. ...

随机推荐

  1. ios 添加到cell 上的button点击无效!扩大button的点击区域(黑魔法)

    一般情况下点击效果都是正常的!要不然你对它做了什么?一般细心的小伙伴都没有遇到这种情况,但是呢! 当然我是二班的!在这里我主要讲两个问题,解决问题和普及魔法. 一.普及问题(button在cell上点 ...

  2. js、jQuery操作input大全 不断完善

    工作中经常用到的,不断更新中... jquery获取单选按钮的值:$("input[name='stageName']:checked").val(); 删除select某几个op ...

  3. Android软键盘调用及隐藏,以及获得点击软键盘输入的字母信息

    在Android提供的EditText中单击的时候,会自动的弹出软键盘,其实对于软键盘的控制我们可以通过InputMethodManager这个类来实现.我们需要控制软键盘的方式就是两种一个是像Edi ...

  4. php中error_report函数的含义及各参数含义

    个错误级别,如下: 1        E_ERROR          致命的运行时错误.错误无法恢复过来.脚本的执行被暂停2        E_WARNING        非致命的运行时错误.脚本 ...

  5. 导演类(CCDirector)

  6. android开发工具类之获得WIFI IP地址或者手机网络IP

    有的时候我们需要获得WIFI的IP地址获得手机网络的IP地址,这是一个工具类,专门解决这个问题,这里需要两个权限: <uses-permission android:name="and ...

  7. Android开发之处理崩溃异常

    众所周知,android的设备千差万别,难免会发生崩溃异常等现象,这个时候就需要捕获哪些崩溃异常了,也就是捕获崩溃异常的相关信息,并记录下来,这样一来方便开发人员和测试人员的分析与调试. 1.首先我们 ...

  8. 衣联网络-亿能测试 安全测试沙龙 PPT资料免费下载

    衣联网络-亿能测试 安全测试沙龙 PPT资料免费下载http://automationqa.com/forum.php?mod=viewthread&tid=2304&fromuid= ...

  9. export命令和import命令 详解

    export命令 模块功能主要由两个命令构成:export和import. export命令用于用户自定义模块,规定对外接口: import命令用于输入其他模块提供的功能,同时创造命名空间(names ...

  10. jquery处理textarea中的手动换行

    textarea的手动换行会产生换行标志,但这个标志存在却看不到,存入数据库中后读出来显示在页面上却不会换行,如何处理呢? 网上众说纷纭,经过测试用 textarea的内容.replace(/\n/g ...