歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Linux下cut命令的使用

Linux下cut命令的使用

日期:2017/2/28 14:23:33   编辑:Linux教程

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命令的解釋就到此結束了。有什麼新的內容,回頭遇到了再補充。^_^

Linux cut命令學習筆記 http://www.linuxidc.com/Linux/2014-10/107877.htm

Linux命令之cat http://www.linuxidc.com/Linux/2013-05/83947.htm

10個有用的Linux命令面試問題及答案 http://www.linuxidc.com/Linux/2014-08/105150.htm

Copyright © Linux教程網 All Rights Reserved