shell替换功能

 

 

       据了解,替换功能有sed,sub,gsub,gensub四种,下面分别讲解其应用方式。

       数据源如下:

SNK17173 3=东方玄幻(传奇) 2=网游 4=意境      
SNK17173 3=东方玄幻(传奇) 2=网游 4!=意境      
SNK17173 3=东方玄幻(传奇) 2!=网游        
SNK17173 3!=东方玄幻(传奇) 5=Flash+视频 3=军事历史      
SNK17173 3!=东方玄幻(传奇) 5=Flash+视频 3!=军事历史 4=游戏原画    
SNK17173 3!=东方玄幻(传奇) 5=Flash+视频 3!=军事历史 4!=游戏原画 1=原创  
SNK17173 3!=东方玄幻(传奇) 5=Flash+视频 3!=军事历史 4!=游戏原画 1!=原创 3=诱惑
SNK17173 3!=东方玄幻(传奇) 5=Flash+视频 3!=军事历史 4!=游戏原画 1!=原创 3!=诱惑
SNK17173 3!=东方玄幻(传奇) 5!=Flash+视频        

      

        如果我想替换除第一列外其他所有列中的3为字符A:

       sed: cat test8.txt  | sed 's/\(^[^\t]*\t\)3/\1A/g'   

       此处是OK的,但是如果换为1,就出问题了;cat test8.txt  | sed 's/\(^[^\t]*\t\)*1/\1A/g';此处第一列中的1也被替换。

       根据高手指点,此处用gensub做固定列以外的字符替换很OK。

       gensub:cat  test8.txt |  awk '{printf $1" ";for(i=2;i<NF+1;i++)printf gensub(/1/,"50","g",$i)" ";print c}'

       这里面有个很有意思的细节,print c 这个起到了换行的作用,而且C换成其他的字符也是同样的效果!

       总结:sed在简单的全局正则替换上有优势,而gensub在部分列的局部替换有优势。

      

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值