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這個檔案。