码迷,mamicode.com
首页 > 系统相关 > 详细

Linux命令之文本处理(二)

时间:2015-06-23 18:04:57      阅读:177      评论:0      收藏:0      [点我收藏+]

标签:

  1. cut命令
    cut命令用来操作文件的列,可以视为列编辑器;与之对应是大多数的行“编辑器”,如sed、grep、sort等,它们操作文本时,以行为单位。
    cut的主要功能就是输出文本的某一列或几列。对于英文文本,一个字符就占据一列,所以输出几列就是输出几个字符。
    主要选项如下:

    • -c : 指定要输出的列数,可以是单个数字,也可以是如3-5之类的范围。

      m@meng:~$ cat new 
      apple   3
      Apple   7
      pear    6
      pear    4
      banana  1
      orange  11
      m@meng:~$ cut -c 1-6 new 
      apple  
      Apple  
      pear    
      pear    
      banana
      orange
    • -b : 指定每行要输出的字节数,与-c选项基本一样,尤其对英文文本,因为一个英文字母就是一个字节(我觉得把英文改成ASCII文本更合适)。

      m@meng:~$ cut -b 3 new 
      p
      p
      a
      a
      n
      a
    • -f : cut更强大的地方在于处理格式化的文本,即每行可以分为几个字段的那种。似乎很多命令都提供这种功能,比如sort,但是做的都很勉强,关键是它们对分隔符的识别太差了。在这方面,awk遥遥领先。
      -f选项用来指定输出哪个字段,默认的分隔符是tab。其实多个空格似乎也能识别,有时间我会专门研究一下分隔符的问题。

      m@meng:~$ cut -f 2 new 
      3
      7
      6
      4
      1
      11

    实际上new文件中名字和数字之间的分隔符并不是tab,而cut却正确识别了;然而,这种情况是不确定的,比如下例:

    m@meng:/etc/network$ sudo netstat -apn | sed ‘3,6 p‘ -n | cut -f 1
    tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      2899/sendmail: MTA:
    tcp        0      0 127.0.0.1:953           0.0.0.0:*               LISTEN      1192/named      
    tcp        0      0 0.0.0.0:538             0.0.0.0:*               LISTEN      1251/gdomap     
    tcp        0      0 0.0.0.0:445             0.0.0.0:*               LISTEN      672/smbd 

    这么明显的分隔都没能识别,源码怎么写的???

    • -d : 指定分隔符,一般配合-f使用。分隔符一般只能指定单个字符。
    • -s : 仅输出包含分隔符的行。它会覆盖-f的一些功能,因为只有-f时,会同时输出不包含分隔符的行;加上-s选项后,就会删除掉没有包含分隔符的行。
    • –output-delimiter=str : 指定输出分隔符为str。默认与输入分隔符一致。
      m@meng:~$ cut --output-delimiter=: -f 1-2 new 
      apple: 3
      Apple: 7
      pear: 6
      pear: 4
      banana: 1
      orange: 11
      m@meng:~$ cut --output-delimiter=: -c 1-4 new 
      appl
      Appl
      pear
      pear
      bana
      oran

    显然,这个选项只对不同字段之间有效。。。

  2. uniq命令
    可以检测出文本中重复的行,类似与sort中-u选项。

    • -d : 只显示那些重复的行。

      m@meng:~$ cat new 
      apple   3
      apple   3
      Apple   7
      pear    6
      pear    4
      banana  1
      orange  11
      m@meng:~$ uniq -d new 
      apple   3
    • -c,–count : 在每行前面显示重复次数。

      m@meng:~$ uniq -c new 
      2 apple     3
      1 Apple   7
      1 pear    6
      1 pear  4
      1 banana  1
      1 orange    11
    • -i : 忽略大小写。

    • -u : 仅输出不重复的行。
      m@meng:~$ uniq -u new 
      Apple   7
      pear    6
      pear    4
      banana  1
      orange  11

    主要的就是这几个选项了,其他的比如-s、-f等,试了几次不管用。

Linux命令之文本处理(二)

标签:

原文地址:http://blog.csdn.net/u012668018/article/details/46606647

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!