SHELL訓練營--day3
shell 特殊符號
在上節中,變數值定義時,提到特殊符號。
在shell中,特殊符號有特別定義,需要在變數宣告時需要脫義。
下面列舉出一些特殊符號:
* 號 :在命令中提到過,萬用字元,表示0++個任意字元。
?號:匹配符,任意一個字元。
# 號:註釋符,表示該行為註釋行。
$號:可做變數名前,表示取變數值。也可 表示行結束符。
!號:主要是用於歷史命令呼叫。可用 "set -H"取消。
~ 號:主要用於路徑描述,表示家目錄。
; 號: 命令列結束。
| 號:管道符。
\>,\>\>,<,<<,號:輸入輸出重定向符。
& 號:後臺執行符。&> 表示檔案正確描述符和錯誤描述符都指向同一個檔案。
|| 和&& 號:命令邏輯運算。|| 表示“或”,前後命令 邏輯取反。&&表示“與”,前後命令邏輯要一致。
[]和{}在 命令中,有介紹。
管道符與命令輸入
前面提到命令的輸出,通過管道符,可以匯入檔案中,也可匯入命令。
常用來做為後面命令的輸入處理的物件。
這裡列舉一些文字檔案處理命令,作為管道符的匯入命令。
- cut命令:以一行 為單位處理物件,進行文字的分隔,顯示,不會修改原檔案。
cut 以引數 -d 指定分隔符,-f 指定顯示的段號。如head -2 /etc/passwd | cut -d ":" -f 1
cut 以引數 -c NUM 指定顯示特定位置字元。
需要注意的是 cut 分隔符不能有效的處理以多個空格為分隔符。
另外cut顯示段號寫法,如:-f 1-4, -f 1,3
-
sort 排序:將文字物件每一行當成一個物件,進行行數重排。
預設以首個字元開始按ascii碼排序。
以引數-n 指定以數字排序,此時其它字元作為0進行排序處理。
另外 sort 也可對行進行分隔(引數 -t 分隔符),然後指定按相應的段進行排序(引數 -kn1,n2 )。
如:sort -t: -k3 -n /etc/passwd
反序排列(-r):sort -r /etc/passwd
另一個較常用引數(-u),去重排列。排列時,如果多行相同,那麼只顯示一行。 -
uniq:去重,常和sort排序一起,
注意的是,sort排序去重,不能統計重複個數。uniq 可通過引數 (-c) 統計重複次數。
uniq 指定的重複是相鄰的行重複。如果重複行有間隔,那麼不會按重複計算。 -
wc : 統計,
uniq是統計行重複,wc 常用來統計不重複的字元,行數。
引數(-l):統計行數。
引數(-c) :統計字元個數,注意包括所有的字元,如換行符。
引數(-w) :統計所有的單詞數。 -
tee 多重輸出
在命令輸出重定向時,預設只能向一個檔案 進行輸出。
但有時在儲存到檔案 時,又需要檢視輸出內容。此時,可用tee命令,將命令輸出到檔案 和標準輸出物件--螢幕上。如:last|head -2 | tee last.list
會在當前目錄下建立last.list檔案,寫入命令結果,並顯示在螢幕上。 -
tr 字元替換
將顯示的內容中 指定特定的字元 替換為其它字元。
注意只能替換字元 。如小寫換為大寫:who | tr '[a-z]' '[A-Z]'
也可刪除字元。 如刪除字元 :who | tr -d 'oo'
也可刪除 相鄰重複字元:echo "hiiii2233455546"|tr -s [i,2-6]
- split切割檔案
以上都是以行為單行處理文字,split 主要用來將檔案分割成大小相等的多個檔案 。
以行為分割單位:split -l 10 /etc/passwd
引數(-b) 以byte為單位分割檔案,注意分割後文件預設是以"x..."開頭。
可指定檔案字首。如:split -b 50 1.txt abc
將1.txt分割成50位元組大小檔案 ,以abc為字首。
又如:split -l 10 /etc/passwd pd
分割為以pd為字首的檔案。