天天看點

shell提取字元串指定的内容cut指令-c的用法:-d的用法:

在寫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