sed

删除:d命令
     sed  ‘2d’  1.txt          删除1.txt文件中的第二行
     sed  ‘2,$d’  1.txt       删除1.txt文件中的第二行到末尾所有行
     sed   ‘$d’   1.txt          删除1.txt文件中的最后一行
     sed   ‘/123/d’  1.txt     删除1.txt文件中含有123的行

替换:s命令
     sed   ’s/taiwu/song/g’  1.txt     在整行范围内把taiwu替换为song,如果没有g标记,则只有每行第一个匹配的taiwu被替换成song。
     sed    -n   ’s/^taiwu/^song/p’  1.txt          (-n)选项和p标志一起使用表示只打印那些发生替换的行。
     sed    ’s/^taiwu/&is my brother/’     1.txt      &符号表示替换字符串中被找到的部分,所有以taiwu开头的行都会被替换成它自己加is my brother。
     sed     ’s#10#100#g’     1.txt         不论什么字符,紧跟着s命令的都被认为是新的分隔符,所以’#’在这里是分隔符,代替默认的’/’分隔符。
     sed      ’s/\(love\)/able/'



选定行的范围:逗号
     sed  -n  ‘/^abc/, /^456/p’  1.txt
     在1.txt文件中,截取一定范围的文本输出,从第一个匹配^abd和行开始,截止到第一个匹配^456的行。

     sed   -n   ‘5, /apple/p’  1.txt
     在1.txt文件中,截取一定范围的文本输出,从第5行开始,截止到第一个匹配apple的行。

                sed   ‘/taiwu/, /song/s/apple/banana/‘  1.txt
             在1.txt文件中,把第一个含义taiwu的行到第一个含有song的行之间的文本拎出来,对其中的apple替换为banana。 


sed使用场景:
1.从数据库general log中,取出某一天的日志,单独拎出来做分析。下面shell表示截取日期160905当天的所有日志,存到mylog文件中。
sed -n '/^160905/,/$/p' VM_206_197_centos.log > mylog
     如上方式存在严重的问题,它只会把含有160905开头的行导出来,但是如果这行下面行还有数据,但是不是以160905开头就导不出来。最正确的方式是 sed  -n  ‘/^160905/, /^160906/p’  log  >  mylog

2.从yii2项目中截取含有某订单信息的所有的行,从而分析某订单的数据。
根据order_id,筛选出相关的行
sed -n 's/30780/&/p' app.log.1 > 2222
根据order_sn,筛选出相关的行
sed -n 's/BJ14732324231038/&/p' app.log.1  >  22

怎么匹配上面两个,正则怎么写???

3.从日志文件中截取某一天的日志,实际最后一行也都是14号的日志,还没有15号的。
如下命令,会把文件中所有14号的日志截取出来,找不到15号,那也会读到最后一行。
sed -n '/^2016-09-14/,/^2016-09-15/p' app.log.3  > 222





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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值