shell替换功能

来源:互联网 发布:javascript创建表格 编辑:程序博客网 时间:2024/05/19 06:17

 

 

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

       数据源如下:

SNK171733=东方玄幻(传奇)2=网游4=意境   SNK171733=东方玄幻(传奇)2=网游4!=意境   SNK171733=东方玄幻(传奇)2!=网游    SNK171733!=东方玄幻(传奇)5=Flash+视频3=军事历史   SNK171733!=东方玄幻(传奇)5=Flash+视频3!=军事历史4=游戏原画  SNK171733!=东方玄幻(传奇)5=Flash+视频3!=军事历史4!=游戏原画1=原创 SNK171733!=东方玄幻(传奇)5=Flash+视频3!=军事历史4!=游戏原画1!=原创3=诱惑SNK171733!=东方玄幻(传奇)5=Flash+视频3!=军事历史4!=游戏原画1!=原创3!=诱惑SNK171733!=东方玄幻(传奇)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
原创粉丝点击