天天看點

8.10 shell特殊符号cut指令 8.11 sort_wc_uniq指令 8.12 tee

8.10 shell特殊符号cut指令 8.11 sort_wc_uniq指令 8.12 tee_tr_split shell特殊符号下

8.10 shell特殊符号

*代表零個或多個任意字元

?隻代表一個任意字元

注釋符号#

表示注釋說明,即#後面的内容都會被忽略。

脫義字元\

這個字元會将後面的特殊符号(如*)還原為普通字元。

管道符|

它的作用是将前面指令的輸出作為後面指令的輸入。一般針對文檔操作的指令比較常用。例如cat,less,head,tail,grep,cut,sort,wc,uniq,tee,tr,split,sed,awk等。

wc -l用來計算一個文檔有多少行。

cut指令

cut指令用來截取某一個字段,其格式為cut -d "分割字元"[-cf]n,這裡的n是數字。

-d:後面跟分割字元,分割字元要用單引号括起來。

-c:後面接的是第幾個字元。

-f:後面接的是第幾個區塊。

-d選項後面加冒号作為分隔符,-f1表示截取第一段,-f和1之間的空格可有可無。

-c選項後面可以是1個數字n,也可以是一個區間n1-n2,還可以是多個數字n1,n2和n3.

指令sort

sort指令用作排序,其格式為sort [-t 分隔符] [-kn1,n2] [-nru],這裡n1和n2指的是數字。

-t:後面跟分隔符,作用跟cut的-d選項一樣。

-n:表示使用純數字排序。

-r:表示反向排序。

-u:表示去重複。

-kn1,n2:表示由n1區間排序到n2區間,可以隻寫-kn1,即對n1字段排序。

如果sort不加任何選項,則從首字元向後依次按ASCII碼值進行比較,最後将它們按升序輸出。示例指令如下:

-t選項後面跟分隔符,-k選項後面跟單個數字表示對第幾個區域的字元串排序,-n選項則表示使用純數字排序。示例指令如下:

-k選項後面跟數字n1和n2表示對n1和n2區域内的字元串排序,-r選項則表示反向排序。示例指令如下:

這裡的-k3,5表示對第3區域至第5區域間的字元串排序。

wc指令

wc指令用于統計文檔的行數、字元數或詞數。

-l:統計行數

-m:統計字元數

-w:統計詞數。

如果wc不跟任何選項,直接跟文檔,則會把行數、詞數和字元數依次輸出。

指令uniq

uniq指令用來删除重複的行,該指令隻有-c選項比較常用,它表示統計重複的行數,并把行數寫在前面。編寫一個檔案,示例指令如下:

使用uniq前,必須先給檔案排序,否則不管用。

指令tee

tee指令後面跟檔案名,其作用類似于重定向>,但它比重定向多一個功能,即把檔案寫入後面所跟檔案時,還顯示在螢幕上。該指令常用于管道符|後。

指令tr

tr指令用于替換字元,常用來處理文檔中出現的特殊符号,如dos文檔出現的符号^M。

-d:表示删除某個字元,後面跟要删除的字元。

-s:表示删除重複的字元。

tr指令常用于把小寫字母變成大寫字母,如tr '[a-z] '[A-Z]'。示例指令如下:

tr指令還可以替換一個字元,示例指令如下:

替換、删除以及去重複等操作都是針對一個字元來講的,如果是針對一個字元串,就不能使用了。

指令split

split指令用于切割文檔。

-b:表示依據大小來分割文檔。示例指令如下:

split不指定檔案名,則會以xaa,xab...這樣的檔案名來存取切割後的檔案。也可以指定目标檔案名,示例指令如下:

-l:表示依據行數來分割文檔,示例指令如下:

shell特殊符号下

特殊符号$

符号$可以用作變量前面的辨別符,還可以和!結合起來使用。示例指令如下:

!$表示上條指令中的最後一個變量。

特殊符号;

在一行中運作兩個或兩個以上的指令,需要在指令之間加符号;。示例指令如下:

特殊符号~

符号~表示使用者的家目錄,root使用者的家目錄是/root,普通使用者則是/home/username。

示例指令如下:

特殊符号&

如果想把一條指令放到背景執行,則需要加上符号&,它通常用于指令運作時間較長的情況。比如,可以用在sleep後,如下所示:

重定向符号>,>>,2>和2>>

重定向符号>和>>,它們分别表示取代和追加的意思。如果想重定向到一個文本,則要用重定向符号2>或者2>>,它們分别表示錯誤重定向和錯誤追加重定向。示例如下:

中括号 []

中括号内為字元組合,代表字元組合中的任意一個,可以是任意一個範圍(1-3,a-z),用法如下:

特殊符号&&和||

&&和||可以用于多條指令中間的特殊符号。

command1;command2   不管command1是否執行成功,都會執行command2。

command1&&command2  隻有command1執行成功後,command2才會執行,否則command2不執行。

使用||時隻有command1執行成功後則command2不執行,否則執行command2,即command1和command2中總有一條指令會執行。用法如下:

本例中,隻有當ls test2成功執行後,才會執行touch test2。因為test2不存在,ls test2沒有執行成功,是以&&後面的touch test2

并沒有執行。

本例中,若ls test2執行不成功,則會執行touch test2。因為test2不存在,是以ls test2沒有執行成功,轉而執行||後面的touch test2,是以增加了test2這個檔案。