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