10 shell命令之sed

sed.不知道英文是怎么解释的.总之它的作用就是以行为单位处理文本数据.我们通常习惯性的把它和另外一个命令awk作为类比.但是虽然二者有着诸多的类似之处.但是sed显然在某些方面做的要比awk要好.下面仅根据自己的理解和掌握做一下对sed的总结.肯定没有那么全面.如果同学们有疑问,可以去man一下sed.理解了以后再man,阅读理解起来应该不成问题.

sed [option] ‘action‘ filename

其中option常用的有:

-n   默认sed会打印出每一行它处理过的数据.而这个选项会让sed除了打印受影响的行,不打印其它内容.

-e   用来衔接多个表达式.也就是上面的action.试了一下,-e的效果是累加的.也就是说前面的action会影响到后面的action(记得之前由此用的时候是不累加的.)

-f   指定条件文件,可以将符合sed规则的条件放在一个文件中.然后用-f进行指定即可.

-i   覆盖源文件,使用这个选项之前请千万确保sed表达式的使用是正确的,否则就哭了.

-z   控制输出分隔符是\0

选项比较常用的就是上面的这几个.下面说说action部分.

a   在当前行的下一行添加内容.行的选择方式可以是关键字,也可以直接指定行号或者正则表达式.下面的选项直到i都类似.

c   替换当前行

d   删除当前行

p   打印匹配的行

i   在当前行的上一行添加内容.

s   正则模式匹配.常与g合用.用法大致如下:s/patern1/patern2/g   意思是将每一行的每一个对应的pattern1都替换成pattern2.g的意思就是正行匹配替换.

y   把一个字符翻译成另外一个字符.不适用正则匹配,所以这个匹配可以理解成是一对一的.y/pattern1/pattern2/

大致就是这些内容.下面看一些实例,不需要注解应该就可以看得懂.

首先是student.info的内容:

No	Name	Mark	Percent
1	Sarath	45	90
2	Alex	49	98
3	Anu	45	90

技术分享

图上大致演示了sed的一部分功能.所以没有放-n选项进行控制.

至于正则表达式,要注意不同的工具,虽然总体是一样的.但是在一些细节上面还是有差距的.

写正则表达式的一个原则就是,确定好哪些是不变的,哪些是要去改变的.这样才能够明确我们需要替换的内容.

我们看看sed的正则表达式.

技术分享

上面这个例子,替换掉开头是最多三个数字.接下来看看如何把mark下面的数字过滤出来并且替换成alai.

技术分享


ok.sed就暂时介绍到这里.对于正则表达式的使用其实并没有想象的那么难,最重要的是要能够给指定的某一行文字分段,找到其中的规律.就像我上面说的.明确需要改变的和不变的内容.就大致可以去尝试了.

通过这篇文章,我又复习了一遍sed,也希望能够对同学们有所帮助.

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。