Linux下cut命令的使用
Linux下cut命令的使用
Linux下有诸多进行文本处理的命令,这里介绍的是cut命令。
cut命令能够对文本文件中的行,进行按字节、字符和字段进行剪切,然后将指定的相应部分写到标准输出。如果没有给定文件名,cut命令将默认读取标准输入。
1、cut命令的语法总括
cut { -b list [-n] | -c list | -f list [-s] [-d character] } [file..]
从上面的格式上不难看出,cut命令的使用主要有三种方式,对应三种不同的参数形式,上面已经分别用不同的颜色进行了标注。其中红色的部分是对应按字节剪切,绿色的部分是对应按字符剪切,棕色的部分是对应按字段剪切。这三种方式中,都用到了list参数,下面简单介绍下list参数的几种形式:
1,3,5 取1、3、5部分(这里的部分的意思就是字节、字符或字段)2-4,7 取2到4部分和第7部分-5,9 取第1到5部分和第9部分,这里的-5就是1-5的简写。5- 取第5部分和其之后的所有部分下面分别介绍按字节、字符和字段剪切。
2、按字节剪切
如上面语法中描述的那样,按字节剪切应该使用-b选项。这里要注意-n选项的使用:-n选项和-b选项一起使用,如果某个字符(这里指多字节字符)的最后一个字节落在list指定的范围内的话就将该字符打印,如果没有,就不打印该字符;如果没有-n选项,list指定的范围如果分隔了一个多字节字符,那么就会打印出乱码。下面是几个例子,这里用作例子的文件是一个随便生成的人名列表,名称是data.txt,内容如下:
$ cat data.txt aName:aGender:aProfession:aBirthday:aHeight:aEtc. aName:aGender:aProfession:aBirthday:aHeight:aEtc. Abbie Cornishi:female:actor:19820807:1.73m:Klondike Hara Mikie:female:pictorial model:19870703:1.62m:Oscar Promotion Co., Ltd. Drew Barrymore:female:actor:19750222:1.63m:Music and Lyrics Kobe Bryant:male:NBA player:19780823:1.98m:Los Angeles Lakers Timothy Theodore Duncan:male:NBA player:19760425:2.11m:San Antonio Spurs Tony Parker:male:NBA player:19820517:1.88m:San Antonio Spurs Manu Ginóbili:male:NBA player:19770728:1.98m:San Antonio Spurs LaMarcus Nurae Aldridge:male:NBA player:19850719:2.11m:Portland Trail Blazers aName:aGender:aProfession:aBirthday:aHeight:aEtc. $下面按字节剪切该文件:
$ cut -b 1-3,16- data.txt aNaProfession:aBirthday:aHeight:aEtc. aNaProfession:aBirthday:aHeight:aEtc. Abbfemale:actor:19820807:1.73m:Klondike Harle:pictorial model:19870703:1.62m:Oscar Promotion Co., Ltd. Drefemale:actor:19750222:1.63m:Music and Lyrics Kobe:NBA player:19780823:1.98m:Los Angeles Lakers Time Duncan:male:NBA player:19760425:2.11m:San Antonio Spurs Tone:NBA player:19820517:1.88m:San Antonio Spurs Manmale:NBA player:19770728:1.98m:San Antonio Spurs LaMAldridge:male:NBA player:19850719:2.11m:Portland Trail Blazers aNaProfession:aBirthday:aHeight:aEtc.本来想演示下-n选项的用法,我的Ubuntu的机器上就是不打印乱码,可能和我终端的设置有关系。换了一台centos的机器,下面是例子:
$ cat chinese.txt 科比布莱恩特 洛杉矶湖人 吉诺比利 圣安东尼奥马刺 $ cut -b 3 chinese.txt ? ? ? ? $ cut -b 3 -n chinese.txt 科 洛 吉 圣 $经过这个实验,你知道一个中文字符大约占几个字节了吧。
3、按字符剪切
按字符剪切比较简单,就是-c选项,下面是例子。
$ cut -b 1-4,5 data.txt aName aName Abbie Hara Drew Kobe Timot Tony Manu LaMar aName $4、按字段剪切
按字段剪切的选项是-f(field)。在使用按字段剪切时,要注意下面的两个选项:
-d character 与-f选项一起使用,指定字符作为字段分隔符(默认的字段分隔符是制表符)。注意,要对有特殊shell含义的字符进行转义,比如如果指定空格为字段分隔符,就必须加引号(-d ‘ ’)。注意,character作为字段分隔符,只能是单个字符。-s 取消不包含字段分隔符的行。下面是几个例子:
$ cut -f 1,3 -d ' ' data.txt //指定空格为字段分隔符,打印第1,3字段 aName:aGender:aProfession:aBirthday:aHeight:aEtc. aName:aGender:aProfession:aBirthday:aHeight:aEtc. Abbie Hara model:19870703:1.62m:Oscar Drew and Kobe player:19780823:1.98m:Los Timothy Duncan:male:NBA Tony player:19820517:1.88m:San Manu player:19770728:1.98m:San LaMarcus Aldridge:male:NBA aName:aGender:aProfession:aBirthday:aHeight:aEtc. $ cut -f 1,3 -d ' ' -s data.txt //使用-s选项,忽略没有字段分隔符空格的行,可以看到结果中没有空格的行没有再被输出 Abbie Hara model:19870703:1.62m:Oscar Drew and Kobe player:19780823:1.98m:Los Timothy Duncan:male:NBA Tony player:19820517:1.88m:San Manu player:19770728:1.98m:San LaMarcus Aldridge:male:NBA $ cut -f 1,3 -d ':' data.txt //指定‘:’为字段分隔符,打印第1、3字段 aName:aProfession aName:aProfession Abbie Cornishi:actor Hara Mikie:pictorial model Drew Barrymore:actor Kobe Bryant:NBA player Timothy Theodore Duncan:NBA player Tony Parker:NBA player Manu Ginóbili:NBA player LaMarcus Nurae Aldridge:NBA player aName:aProfession $到这里,cut命令的解释就到此结束了。有什么新的内容,回头遇到了再补充。^_^
评论暂时关闭