Unix shell 學習系列——工具

來源:互聯網
上載者:User

這是shell學習系列的第一期,將會不斷更新。。。

具體的學習書籍:Unix shell 編程(第三版)    

本節介紹在shell編程中經常用到的一些工具

 

1、Shell工具----Regex

關於Regex,前面已經有一篇學習筆記描述了大部分常用的應用,文章在這兒

 

2、Shell工具----cut

 

cut命令一般用於從資料檔案或者命令的輸出中析取出各種各樣的資料域,一般格式為:

cut –cchars file

chars指定想從檔案的每一行析取那些文字,可以是一個數字,代表每一行的第幾個字元:

cut –c5   data取第五個字元

cut –c5,13,51  data取第五、第13和第51個字元

cut –c20-50   data 取第20到第50之間的字元,包括他們自己

cut –c20-  data 取第20個字元到行尾的所有內容,並把結果輸出到標準輸出

上述樣本中的逗號和連字號可以混合使用,達到析取多列欄位的目的

 

如果 不指定file參數,將從標準輸入讀取資料,意味著該命令可以作為管道過濾器

 

cut命令的-d和-f選項

當資料用特定的字元分割時,可以用這兩個選項來析取指定的欄位,命令格式為:

cat –ddchar –ffields file

dchar用來指定特定分隔字元,fields用來指定要析取出的欄位的編號(從1開始),可以用逗號和連字號指定多個域,用法和-c選項中的數字指定是相同的

如果上述格式中沒有指定分隔字元,cut就用定位字元作為預設的分隔字元

 

小技巧:如果事先不知道字元之間是用定位字元還是空格分隔的,可以使用下述命令來觀察,如果是用定位字元分隔的,它會顯式的將定位字元輸出為\t:

sed –n l filename

 

 

3、shell工具—paste

 

paste用來將多行合在一起,與cut的功能差不多相反,一般格式為:

paste files 

files之間用空格隔開,files指定的所有檔案中的對應行形成一行,然後寫入標準輸出,可以用破折號(-)表示從標準輸入獲得輸入;

 

-d選項

預設情況下,形成一行時,不同檔案的行內容之間用定位字元分隔,可以用-d選項來指定分隔字元,如:paste –d'+' names address。

-s選項

使用-s選項告訴paste將同一檔案中的所有行粘到一起,而不是從其他檔案,也可以使用-d選項來指定分隔字元。

 

 

4、Shell工具-sed

 

Sed(stream editor)意即流編輯器,用來編輯資料,命令格式為:

sed command file

其中command是作用於檔案file各行的風格同ed的命令,如果沒有指定檔案,就把標準輸入作為處理對象,命令執行結束後將處理結果寫到標準輸出(不是在原檔案上做修改)。

 

替換的例子:

sed 's/Unix/UNIX/' intro    //將檔案intro中的每一行的第一個Unix替換為UNIX

sed 's/Unix/UNIX/g' intro   //通過在s命令的後邊加上全域選項g,保證替換一行中的所有串

 

注意,sed工具的command都是用單引號括起來的。

 

-n選項告訴sed除非顯式說明,否則不顯示任何一行,p命令指定顯示那幾行

sed –n '1,2p' intro    //只顯示前兩行

sed –n '/UNIX/p' intro  //顯示包含UNIX的行

 

d命令完成刪除整行文字的功能

sed '1,2d' intro  //刪除第一行和第二行

sed '/UNIX/d' intro //刪除包含UNIX的所有行

sed預設把輸入的所有行寫入到標準輸出,故上述命令將刪除指定行剩餘的其他行都顯示

 

其他一些展示sed強大功能的例子:

sed '5d'                                                 //顯示第5行

sed '/[Tt]est/d'                        //顯示包含Text/text的行

sed –n '20,25p' text                                      //顯示第20-25行

sed '1,10s/unix/UNIX/g' intro           //在1-10行中將所有unix替換為UNIX

sed '/jan/s/-1/-5/'                                //將所有包含jan的行中-1替換為-5

sed 's/…//' data                                    //刪除每行的前三個字元

sed 's/…$//' data                                 //刪除每行結尾的3個字元

sed –n 'l' text                                                  //顯示text的所有行,把所有不可列印字元顯示為\nn(8進//制值),定位字元顯示為\t(不太懂?求解釋

 

shell工具-------tr

 

tr工具用來轉換來自標準輸入的單個字元,一般格式為:tr from-chars to-chars

其中from-chars和to-chars是一個或多個字元,轉換的結果寫到標準輸出,原檔案保持不變。

 

cut –d: -f1,6 /etc/passwd |tr : '       '

上述命令首先將passwd檔案中用“:”分隔的第一個和第六個欄位提取出來,然後用tr工具將分隔字元冒號定位點化

 

-s選項壓縮tochars中連續重複出現的字元

-d選項刪除來自輸入資料流中的指定字元,此時只有一個參數

fromchars和tochars也可以為多個字元,但字元數目要一樣,完成對位的替換,如tr 'a-z' 'A-Z'將所有小寫字母轉換為大寫字母,tr '[A-Z]' '[N-ZA-M]'把A-M替換為N-Z將N-Z替換為A-M

 

 

shell工具-------grep

 

grep命令可以從一個或多個檔案中搜尋特定的字串模式,一般格式為:grep pattern files

執行命令後符合模式pattern的字串的所有行都輸出到標準輸出,如果給grep指定了多個檔案,會在每一行的前面顯示檔案名稱,如果在給定的檔案中沒有符合該模式的字串,則什麼都不輸出。如果不指定輸入檔案,grep將從標準輸入獲得輸入。

 

最好將模式括在一對單引號中,這樣可以保護其不受shell的幹擾。

 

-i選項指明在匹配模式時忽略字母的大小寫,模式可以使用Regex。

-v選項輸出指定檔案中不與模式比對的所有行

-l選項 使用該選項時,只輸出包含指定模式的檔案的檔案名稱

-n選項 使用該模式時,不僅輸出與模式比對的行內容,還在每一行前加上該行在檔案中的相對行號

 

shell工具------sort

 

預設情況下,sort取出指定檔案中的每一行,將他們按升序排序,特殊字元按照它們的內部編碼排序。

-u選項:在輸出中去除重複的行

-r選項:顛倒排序次序,即按降序排序

-o選項:如果要將排序結果寫入原檔案,用輸出重新導向的話會破壞檔案,-o選項完成這項工作

-n選項:表示把行中的第一個欄位當作數值,按算術方法進行排序

 

要指定按行中的某個特定欄位排序,可以用+dn選項,d代表阿拉伯數字

sort +1n data  //排序時跳過第一個欄位,然後按算術方法排序,將1改為5表示跳過前五個欄位,欄位預設用空格或定位字元進行分隔,如果採用的是其他的分隔字元,使用-t選項指定

-t選項:t後面跟的字元被當作分隔字元

未完待續。。。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.