linux之cut命令的用法

1、linux之cut命令的用法

英文定義:linux

Print selected parts of lines from each FILE to standard output.less

1:cut應用範圍

是一個選取命令,就是將一段數據通過分析,取出咱們想要的。通常來講,選取信息一般是針對「行」來進行分析的,並非整篇信息分析的

2:cut 用法格式this

cut [-bn] [file] 或 cut [-c] [file]  或  cut [-df] [file]編碼


3:主要參數
-b :以字節爲單位進行分割。這些字節位置將忽略多字節字符邊界,除非也指定了 -n 標誌。
-c :以字符爲單位進行分割。
-d :自定義分隔符,默認爲製表符。
-f :與-d一塊兒使用,指定顯示哪一個區域。
-n :取消分割多字節字符。僅和 -b 標誌一塊兒使用。若是字符的最後一個字節落在由 -b 標誌的 List 參數指示的<br />範圍以內,該字符將被寫出;不然,該字符將被排除。
spa


4:cut查找和切分通常的標準,經常使用參數選項orm

第一,字節(bytes),用選項-bci

第二,字符(characters),用選項-c文檔

第三,域(fields),用選項-finput


5:cut按字節查找舉例(參數:-b)(以/passwd文件爲實例說明)it

tail -n 3 /etc/passwd

mailnull:x:47:47::/var/spool/mqueue:/sbin/nologin

smmsp:x:51:51::/var/spool/mqueue:/sbin/nologin

www:x:503:502::/home/www:/sbin/nologin


1) 截取每行的第一個字節,cut -b + 數字(後面的數字就是表示第幾個字節)

tail -n 3 /etc/passwd |cut -b 1

m

s

w

2) 截取每行的多個字節(好比截取2-5個字節)

參數:cut -b 2-5 

tail -n 3 /etc/passwd |cut -b 2-5

ailn

mmsp

ww:x

3) 截取每行的多個字節,能夠經過逗號隔開,表示多種不一樣截取方式

舉例:(好比截取2-5個字節和7-8個字節) 

參數:cut -b 2-5,7-8 

tail -n 3 /etc/passwd |cut -b 2-5,7-8

ailnll

mmspx:

ww:x50

4) 截取每行的多個字節(縮寫技巧) 

參數:cut -b -3 表示從第1個到3個 

      cut -b 3- 表示從第三個開始到結尾

截取每行的第1個到第三個字符

tail -n 3 /etc/passwd |cut -b -3

mai

smm

www

截取每行的第3個到尾部的所有字符

tail -n 3 /etc/passwd |cut -b 3-

ilnull:x:47:47::/var/spool/mqueue:/sbin/nologin

msp:x:51:51::/var/spool/mqueue:/sbin/nologin

w:x:503:502::/home/www:/sbin/nologin


2、cut按字符查找舉例(參數:-c)(以/passwd文件爲實例說明)

參數:cut -c 

說明:其實在英文字符截取中(按字符和字節查找區別不大,但正截取中文字符中兩者就有區別了)兩者用法和參數格式差很少,下面咱們來看看他們在截取中文字符的時候的區別

1)在截取英文字符狀況下的比較

tail -n 3 /etc/passwd |cut -b -5

mailn

smmsp

www:x

----------------------------------------

tail -n 3 /etc/passwd |cut -c -5

mailn

smmsp

www:x

2中方式顯示的內容同樣,區別不大


2)截取中文字符比較

在中文截取中 cut -b會按字節截取,就是每次截取8bit長度的字符,而中文根據編碼不同,通常是三個字符或者2個字符表示一個

中文,因此在用 cut -b在截取的時候就會出現亂碼,不能正確顯示字符,解決辦法添加另一個參數:-n,就不會按單個字符截取了

結論:cut -bn 可以解決中文截取亂碼問題,-n用於告訴cut不要將多字節字符拆開

舉例:

cat cut_ch.txt
星期一
星期二
星期三
星期四
cut -b 3 cut_ch.txt
xxxx亂碼

xxxx亂碼

xxxx亂碼
[rocrocket@rocrocket programming]$ cut -c 3 cut_ch.txt




看到了吧,用-c則會以字符爲單位,輸出正常;而-b只會以字節(8位二進制位)來計算,輸出就是亂碼。
當遇到多字節字符時,可使用-n選項,

3、按域來進去提取信息

域是怎麼回事呢?

爲何會有「域」的提取呢,由於剛纔提到的-b和-c只能在固定格式的文檔中提取信息,而對於非固定格式的信息則一籌莫展。這時候「域」就派上用場 了。若是你觀察過/etc/passwd文件,你會發現,比較零散的排放。可是,冒號在這個文件的每一行 中都起到了很是重要的做用,冒號用來隔開每個項。

咱們很幸運,cut命令提供了這樣的提取方式,具體的說就是設置「間隔符」,再設置「提取第幾個域」,就OK了!

舉例說明

tail -n 3 /etc/passwd |cut -d : -f 1

mailnull

smmsp

www

原理:經過分割符":"把每一行切分紅N段,而後經過-f參數獲取想要得到的分割的段,-f後面的數字就是表示顯示輸出第幾個段

tail -n 3 /etc/passwd |cut -d : -f 1,6

mailnull:/var/spool/mqueue

smmsp:/var/spool/mqueue

www:/home/www

獲取第1個和第6個段

4、擴展

1)有時候製表符確實很難辨認,有一個方法能夠看出一段空格究竟是由若干個空格組成的仍是由一個製表符組成的。

cat tab_space.txt
this is tab finish.
this is several space      finish.
sed -n l tab_space.txt
this is tab\tfinish.$
this is several space      finish.$
看到了吧,若是是製表符(TAB),那麼會顯示爲\t符號,若是是空格,就會原樣顯示。
經過此方法便可以判斷製表符和空格了。
注意,上面sed -n後面的字符是L的小寫字母哦,不要看錯。

2)我應該在cut -d中用什麼符號來設定製表符或空格呢?

其實cut的-d選項的默認間隔符就是製表符,因此當你就是要使用製表符的時候,徹底就能夠省略-d選項,而直接用-f來取域就能夠了。

若是你設定一個空格爲間隔符,那麼就這樣:

cat tab_space.txt |cut -d ' ' -f 1
this
this
注意,兩個單引號之間可確實要有一個空格哦,不能偷懶。
並且,你只能在-d後面設置一個空格,可不準設置多個空格,由於cut只容許間隔符是一個字符。

 cat tab_space.txt |cut -d ' ' -f 1
cut: the delimiter must be a single character
Try `cut --help' for more information.

3)cut有哪些缺陷和不足?

猜出來了吧?對,就是在處理多空格時。
若是文件裏面的某些域是由若干個空格來間隔的,那麼用cut就有點麻煩了,由於cut只擅長處理「以一個字符間隔」的文本內容


備註:英文用法幫助參考

Usage: cut OPTION... [FILE]...

Print selected parts of lines from each FILE to standard output.

Mandatory arguments to long options are mandatory for short options too.

  -b, --bytes=LIST        select only these bytes 

  -c, --characters=LIST   select only these characters

  -d, --delimiter=DELIM   use DELIM instead of TAB for field delimiter

  -f, --fields=LIST       select only these fields;  also print any line

                            that contains no delimiter character, unless

                            the -s option is specified

  -n                      with -b: don't split multibyte characters

      --complement        complement the set of selected bytes, characters

                            or fields

  -s, --only-delimited    do not print lines not containing delimiters

      --output-delimiter=STRING  use STRING as the output delimiter

                            the default is to use the input delimiter

      --help     display this help and exit

      --version  output version information and exit


Use one, and only one of -b, -c or -f.  Each LIST is made up of one

range, or many ranges separated by commas.  Selected input is written

in the same order that it is read, and is written exactly once.

Each range is one of:


  N     N'th byte, character or field, counted from 1

  N-    from N'th byte, character or field, to end of line

  N-M   from N'th to M'th (included) byte, character or field

  -M    from first to M'th (included) byte, character or field


With no FILE, or when FILE is -, read standard input.

相關文章
相關標籤/搜索