linux的cut命令詳解

jopen 10年前發布 | 14K 次閱讀 Linux

有時我們經常會遇到這樣一些問題:有一頁電話號碼薄,上面按順序規則地寫著人名、家庭住址、電話、備注等,此時我們只想取出所有人的名字和其對應的電話號碼,你有幾種方法可以實現呢?

確實這種縱向定位的方式用常規辦法難以實現,這時,cut就可以大顯身手了。 

What’s cut?

子曰:cut命令可以從一個文本文件或者文本流中提取文本列。 

命令用法:

       cut -b list [-n] [file ...]

       cut -c list [file ...]

       cut -f list [-d delim][-s][file ...] 

l      上面的-b、-c、-f分別表示字節、字符、字段(即byte、character、field);

l      list表示-b、-c、-f操作范圍,-n常常表示具體數字;

l      file表示的自然是要操作的文本文件的名稱;

l      delim(英文全寫:delimiter)表示分隔符,默認情況下為TAB;

l      -s表示不包括那些不含分隔符的行(這樣有利于去掉注釋和標題) 

上面三種方式中,表示從指定的范圍中提取字節(-b)、或字符(-c)、或字段(-f)。 

范圍的表示方法:

N

只有第N項

N-

從第N項一直到行尾

N-M

從第N項到第M項(包括M)

-M

從一行的開始到第M項(包括M)

-

從一行的開始到結束的所有項

 

 

下面是實例,先以較簡單的“命令用法”中提及的第二條開始講起:

 linux的cut命令詳解

interrupts文件中的字符排列非常齊整,正適合我們切豆腐。

 

 

但這里我們只對兩個數字列感興趣,用法如下:

 linux的cut命令詳解

 

 

里面還有一些不需要的內容,精減一下:

 linux的cut命令詳解

關于正則表達式的使用,請自行查閱相關資料。

 

 

合到一起:

 linux的cut命令詳解

哇,果然夠帥!!

 

 

不相鄰列的截選又應該如何做呢?

 linux的cut命令詳解

這種方式需要事先確定占多少個字符位置,不僅麻煩,而且容易出錯。

 

 

下面的問題該怎么去做?

 linux的cut命令詳解

 

 

這就是第二講:使用cut –f提取文本中的字段。

 

cut –c主要是用來在固定字符位置或個數的文本文件中提取,對于上面的例子就顯得無能為力了。仔細觀察,發現passwd文件有個規律,就是以冒號來區分不同的段的文本,于是。。。

 linux的cut命令詳解

怎么樣,好玩吧~!

 

 

繼續,創建一個文本文件,名為a.txt,名字有點土,湊合著用吧。

 linux的cut命令詳解

A1、B1、C1所代表的行字符之間均以TAB分隔,D1卻是以空格來分開的。

 

 

 linux的cut命令詳解

看到-s的作用了嗎?(因為第一行不含有任何TAB字符,所以直接被剔除了),而最后一行(即D1行),是以空格區分間距,所以也不合要求。

 

 

 linux的cut命令詳解

多了個參數,這個我沒講,只要你的智商比范偉高一點點,就肯定能猜出來啦。^_^

 

 

好了,下面是最后一個用法的講解了:

 linux的cut命令詳解

 

 

因為虛擬終端下無法顯示漢字,所以我只好回到圖形下,截圖就成這個白不垃圾的樣子啦,忍忍吧,就快講完了。

  

在這個文件中,每個漢字都是用半角空格分隔的。

 

 

 linux的cut命令詳解

 

 

用cut –c已經成功了,下面試試cut –b怎么樣?

 linux的cut命令詳解

沒有反應,why?

   

原因在于漢字本身是雙字節的,cut –c把漢字“我”當成一個字符來處理,而cut –b是以字節來處理,把“我”拆成了兩個字節,結果是字符被“切成兩半”,因此無法正常顯示。

 

 

原因找到了,要怎么辦才好呢?

 linux的cut命令詳解

 

 

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!