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,也希望能够对同学们有所帮助.


后补:

在shell编程中,无论是awk还是sed,都需要引用外部变量来完成一些工作.sed没有awk那么复杂,只要像正常一样使用变量即可.没有什么特别的地方.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值