文章目錄
-
-
- sort指令
-
- 常用選項:
- uniq指令
-
- 常用選項:
- tr指令
-
- 常用選項:
- 參數:
- 正規表達式
-
- 基礎正規表達式
- 擴充正規表達式
-
sort指令
以行為機關對檔案内容進行排序,也可以根據不同的資料類型來排序
文法格式:
sort [選項] 參數
cat file | sort 選項
常用選項:
-f:忽略大小寫,預設會将大寫字母排在前面
-b:忽略每行前面的空格
-n:按照數字進行排序
-r:反向排序
-u:等同于uniq,表示相同的資料僅顯示一行
-t:指定字段分隔符,預設使用[Tab]鍵分隔
-k:指定排序字段
-o <輸出檔案>:将排序後的結果轉存至指定檔案

uniq指令
用于報告或者忽略檔案中連續的重複行,常與 sort 指令結合使用
文法格式:
uniq [選項] 參數
cat file | uniq 選項
常用選項:
-c:進行計數,并删除檔案中連續重複出現的行
-d:僅顯示連續的重複行
-u:僅顯示不連續的隻出現一次的行
tr指令
常用來對來自标準輸入的字元進行替換、壓縮和删除
文法格式:
tr [選項] [參數]
常用選項:
-c:保留字元集1的字元,其他的字元(包括換行符\n)用字元集2替換
-d:删除所有屬于字元集1的字元
-s:将重複出現的字元串壓縮為一個字元串;用字元集2替換字元集1
-t:字元集2替換字元集1,不加選項同結果
參數:
- 字元集1:指定要轉換或删除的原字元集。當執行轉換操作時,必須使用參數“字元集2"指定轉換的目标字元集。但執行删除操作時,不需要參數"字元集2"。
- 字元集2:指定要轉換成的目标字元集。
echo "xyz" | tr 'a-z' 'A-Z' echo "xyz" | tr -t 'a-z' 'A-Z'
echo -e "xyz\nxyzhxyz" | tr -c "xy\n" "1"
echo "gooooodhjjl" | tr -d "oj"
echo "gooooodhjjl" | tr -d 'oj'
echo "gooodeel haan" | tr -s 'oea'
echo "gooodeel haan" | tr -s 'oea' "123"
可以使用tr和sort指令進行數組的排序
正規表達式
- 正規表達式通常用于判斷語句中,用來檢查某一字元串是否滿足某一格式
- 正規表達式是由普通字元與元字元組成
- 普通字元包括大小寫字母、數字、标點符号及一些其他符号
- 元字元是指在正規表達式中具有特殊意義的專用字元,可以用來規定其前導字元(即位于元字元前面的字元)在目标對象中的出現模式
基礎正規表達式
支援的工具:grep、egrep、sed、awk
基礎正規表達式常見元字元:
\ :轉義字元,用于取消特殊符号的含義,例:\!、\n、\$等
^ :比對字元串開始的位置,例:^a、^the、^#、^[a-z]
$ :比對字元串結束的位置,例:word$、^$比對空行
. :比對除\n之外的任意的一個字元,例:go.d、g..d
* :比對前面子表達式0次或者多次,例:goo*d、go.*d
[list] :比對list清單中的一個字元,例:go[ola]d,[abc]、[a-z]、[a-z0-9]、[0-9]比對任意一位數字
[^list] :比對任意非list清單中的一個字元,例:[^0-9]、[^A-Z0-9]、[^a-z]比對任意一位非小寫字母
\{n\} :比對前面的子表達式n次,例:go\{2\}d、'[0-9]\{2\}'比對兩位數字
\{n,\} :比對前面的子表達式不少于n次,例:go\{2,\}d、'[0-9]\{2,\}'比對兩位及兩位以上數字
\{n,m\} :比對前面的子表達式n到m次,例:go\{2,3\}d、'[0-9]\{2,3\}'比對兩位到三位數字
注:egrep、awk使用{n}、{n,}、{n,m}比對時“{}”前不用加“\”
擴充正規表達式
支援的工具:egrep、awk
擴充正規表達式元字元:
+ :比對前面子表達式1次以上,例:go+d,将比對至少一個o,如god、good、goood等
? :比對前面子表達式0次或者1次,例:go?d,将比對gd或god
() :将括号中的字元串作為一個整體,例1:g(oo)+d,将比對oo整體1次以上,如good、gooood等
| :以或的方式比對字條串,例:g(oo|la)d,将比對good或者glad
舉例:
比對173開頭的手機号
#以173開頭,後面随機8位數字組合
"^173[0-9]{8}$"
egrep "^173[0-9]{8}$" shou.txt
grep "^173[0-9]\{8\}$" shou.txt
比對E-mail位址
使用者名@ :^([a-zA-Z0-9_\-\.\+]+)@
子域名 :([a-zA-Z0-9_\-\.]+)
頂級域名(字元串長度一般在2到5) :\.([a-zA-Z]\{2,5\})$
egrep '^([a-zA-Z0-9_\-\.\+]+)@([a-zA-Z0-9_\-\.]+)\.([a-zA-Z]{2,5})$' you.sh
awk '/^([a-zA-Z0-9_\-\.\+]+)@([a-zA-Z0-9_\-\.]+)\.([a-zA-Z]{2,5})$/{print $0}' you.sh