在寫shell程式的很多時候我麼需要提取字元串中相應的值來做進一步的處理,比如需要寫一個關閉某些程序的腳本,此時就需要擷取這些程序的ID然後加上kill指令來關閉這些程序,然而當我們使用ps指令去查詢程序ID的時候我們得到的值不僅僅包含程序的ID值,還包含很多資訊,提取程序ID 這個關鍵字元串的值就不得不使用兩個指令cut 和awk;
cut指令
用法: cut 參數 檔案名
說明:cut 指令從檔案的每一行剪切位元組、字元和字段并将這些位元組、字元和字段寫至标準輸出。
參數:
-b :以位元組為機關進行分割。這些位元組位置将忽略多位元組字元邊界,除非也指定了 -n 标志。
-c :以字元為機關進行分割。
-d :自定義分隔符,預設為制表符。
-f :與-d一起使用,指定顯示哪個區域。
-n :取消分割多位元組字元。僅和 -b 标志一起使用。如果字元的最後一個位元組落在由 -b 标志的 List 參數訓示的
更多參數請參考:cut - -help
-b用法:
以位元組為機關,指定相應的位元組輸出,由于一個英文字元隻占用一個位元組,是以對英文字元可以與-c等價,但是占用多個節編碼的字元不适用,比如中文;
檔案内容:
$ cat test.txt
ABCDEFGHIJ
abcdefghij
hello wrold!
指定檔案中每行的第1,3到7個字元輸出:
cut -b ,- test.txt
ACDEFG
acdefg
hllo w
-n表示1到前n個字元,n-表示從n開始的所有字元
列印前兩個字元和從第8個開始的字元
$ cut -b -,- test.txt
ABHIJ
abhij
herold!
中文:
檔案内容:
$ cat test1.txt
我們好像在哪見過
你記得嗎?
好像那是一個春天!
列印第1個位元組的結果
$ cut -b test1.txt
▒
▒
▒
亂碼原因:中文一個字元用兩個以上位元組編碼
-c的用法:
-c的用法和-b的用法基本相同,但是-c是以字元進行分割,能更好的提取多位元組編碼的字元。
檔案内容:
$ cat test1.txt
我們好像在哪見過
你記得嗎?
好像那是一個春天!
列印第1個位元組的結果
我
你
好
-d的用法:
前面講的-b和-c都是以固定截取字元串,-d和-f結合就可以按照我們規定的方式截取字元串,通過-d來隻是以什麼為分隔符,通過-f來訓示取第幾項;
基本格式:
cut -d ‘指定分隔符’-f 需要第幾項
打開/etc/passwd檔案取前五行
cat /etc/passwd|head -n
root:x:::root:/root:/bin/bash
daemon:x:::daemon:/usr/sbin:/usr/sbin/nologin
bin:x:::bin:/bin:/usr/sbin/nologin
sys:x:::sys:/dev:/usr/sbin/nologin
sync:x:::sync:/bin:/bin/sync
觀察發現每一行都有‘:’每一項之間通過‘:’來分隔,如果想要取第一項可以輸入如下指令:
cat /etc/passwd|head -n | cut -d ':' -f
root
daemon
bin
sys
sync