做者 | WenasWeihtml
將每一個文件中選定的行部分打印到標準輸出, 若是沒有文件,或者文件是-,則讀取標準輸入,長選項的強制參數對於短選項也是強制的。node
cut 是一個選取命令,通常來講,選取信息一般是針對「行」來進行分析的,並非整篇信息分析的,用於顯示每行從開頭算起 num1 到 num2 的文字。linux
cut 命令從文件的每一行剪切字節、字符和字段並將這些字節、字符和字段寫至標準輸出。ubuntu
若是不指定 File 參數,cut 命令將讀取標準輸入。必須指定 -b、-c 或 -f 標誌之一, cut 默認以製表符爲分隔符。bash
參數:服務器
在 -b、-c 或 -f 中只能使用一個。每一個LIST由一個組成
範圍,或用逗號分隔的多個範圍。選定的輸入被寫入
順序與讀取和寫入的順序相同。app
cut 命令主要是接受三個定位方法:測試
執行命令查詢幫助文檔:ui
cut --help
cut幫助文檔解析:spa
'--bytes =字節列表'
選擇僅打印字節列表中列出的位置中的 字節。製表符和退格鍵與其餘任何字符同樣;他們佔用了1個字節。若是指定了輸出定界符,而後在所選字節範圍之間輸出該字符串。
'--characters =字符列表'
選擇僅打印在 character-list 中列出的位置中的 字符。目前與 -b 相同,可是國際化將改變這種情況。製表符和退格鍵與其餘任何字符同樣;他們佔1個字符。若是指定了輸出定界符,而後在所選字節範圍之間輸出該字符串。
'--delimiter = input_delim_byte'
和 -F,請使用 input_delim_byte 的第一個字節做爲輸入字段分隔符(默認爲TAB)。
'--fields =字段列表'
選擇僅打印在 field-list 中列出的字段。默認狀況下,字段之間用TAB字符分隔。還要打印任何不包含定界符的行,除非 -僅定界 (-s)選項已指定。
不要拆分多字節字符。
'-僅定界'
爲了 -F,請勿打印不包含字段分隔符的行。一般,任何沒有字段分隔符的行都按原樣打印。
當你執行 who 命令時,會輸出相似以下的內容:
$ who root pts/1 2021-04-25 21:51 (58.62.93.183) root pts/0 2021-04-25 21:50 (58.62.93.183)
$ who|cut -b 3 o o
方案1:
$ who |cut -b 1-3 roo roo roo
方案2:
$ who |cut -b 1,2,3 roo roo roo
-b 支持形如 1-3 的寫法,並且多個定位之間用逗號隔開就能夠了。
注意:
cut 命令若是使用了-b選項,那麼執行此命令時,cut 會先把 -b 後面全部的定位進行從小到大排序,而後再提取。不能顛倒定位的順序。
who|cut -b 1-3,20- roo 2021-04-25 21:51 (58.62.93.183) roo 2021-04-25 21:50 (58.62.93.183) roo 2021-04-25 23:05 (58.62.93.183)
n = 2 的狀況下
方案1:
$ who |cut -b 2- oot pts/1 2021-04-25 21:51 (58.62.93.183) oot pts/0 2021-04-25 21:50 (58.62.93.183) oot pts/2 2021-04-25 23:05 (58.62.93.183)
方案2:
$ who |cut -b -2 ro ro ro
建立一份測試文件: test.txt
vi test.txt
測試文件內容數據
apple=蘋果=pingguo create=建立 delect=刪除 exe=程序 good=好的
-c與命令查詢結果:
who|cut -c 1-3,20- roo 2021-04-25 21:51 (58.62.93.183) roo 2021-04-25 21:50 (58.62.93.183) roo 2021-04-25 23:05 (58.62.93.183)
看似查詢結果相同,只是由於這個例子 who 輸出取的數據都是字節字符,因此用 -b 和 -c 沒有區別,若是你提取中文,區別就看出來了,看看中文提取的狀況:
$ cut -b 3-10 test.txt ple=蘋 eate=創 lect=刪 e=程序 od=好 $ cut -c 3-10 test.txt ple=蘋 eate=創 lect=刪 e=程序 od=好
結果發現,這個問題不知道哪一個版本已經修復了,附加上測試使用的 linux 版本,其餘命令與 -b使用相似,下面將再也不一一列舉。
$ cat /proc/version Linux version 4.15.0-52-generic (buildd@lgw01-amd64-051) (gcc version 7.3.0 (Ubuntu 7.3.0-16ubuntu3)) #56-Ubuntu SMP Tue Jun 4 22:49:08 UTC 2019
cut 的 -d 選項的默認間隔符就是製表符,因此當你就是要使用製表符的時候,徹底就能夠省略 -d 選項,而直接用-f來取域就能夠了。
$ head -n 5 /etc/passwd root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin bin:x:2:2:bin:/bin:/usr/sbin/nologin sys:x:3:3:sys:/dev:/usr/sbin/nologin sync:x:4:65534:sync:/bin:/bin/sync $ head -n 5 /etc/passwd |cut -d ':' -f 1 root daemon bin sys sync
$ head -n 5 test.txt |cut -d : -f 1 apple=蘋果=pingguo create=建立 delect=刪除 exe=程序 good=好的 $ head -n 5 test.txt |cut -d = -f 2 蘋果 建立 刪除 程序 好的
$ head -n 5 test.txt |cut -d = -f2- $ head -n 5 test.txt |cut -d = -f2,3 $ head -n 5 test.txt |cut -d = -f2-3
$ cat test.txt |cut -d '==' -f2-3 cut: the delimiter must be a single character