標籤:
shell指令碼(四)
(7)tr命令
#實現字元轉換功能
#-c string:反選string字元集,即除了該字串的所有字元集
#-d string:刪除string中出現的所有字元
#-s:刪除所有重複出現的字元序列,只保留一個
#刪除所有數字
tr -d "[[:digit:]]" < name.txt
tr -d 0-9 < name.txt
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/6E/42/wKioL1V33TThK0_5AADjuh2r3GM034.jpg" />
#所有小寫字母轉換成大寫字母
tr "[a-z]" "[A-Z]" < name.txt
tr "[[:lower:]]" "[[:upper:]]" < name.txt
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/6E/46/wKiom1V325ChvAkqAAE7_xROq0A755.jpg" />
#-c用法,將所有非26個字母替換成分行符號,並且重複出現的分行符號壓縮成1個分行符號
tr -cs "[a-z][A-Z]" "[\n]" < name.txt
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/6E/42/wKioL1V33TbQq3c9AADG2djsQg8833.jpg" />
#支援使用字元*數字模式,如n*4代表n出現4次
#-s是將連續重複出現的字母、數字壓縮成1個
tr -s "[a-z][A-Z],[[:digit:]]" < num.txt
#結果同1行的test,t和t並不算是重複的
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/6E/46/wKiom1V325GgL8wDAAEJKtj-REc150.jpg" />
3、Regex
(1)匹配符:"*"、"^"、"."、"$"等
"*":0個或多個在*字元之前的那個一般字元
".":匹配任一字元
"^":匹配行首,放在[]字元集裡面表示取反
"$":匹配行末
"[]":匹配字元集
"\":轉義符,屏蔽一個元字元的特殊意義
"\<\>":精確匹配符號
"\{n\}":匹配前面字元出現n次
"\{n,\}":匹配前面字元至少出現n次
"\{n,m\}":匹配前面字元出現n-m次
(2)擴充:"?"、"+"、"()"、"|"
"?":匹配0個或1個在?字元之前的那個一般字元
"+":匹配1個或多個在+字元之前的那個一般字元
"()":表示一個字元集
"|":表示"或",匹配一組可選的字元
(3)grep命令
#支援Regex的多用途文本搜尋工具
#-c:只輸出匹配行的數量;-i:搜尋時忽略大小寫;-h:查詢多檔案時不顯示檔案名稱;
#-l:只列出符合匹配的檔案名稱,而不列出具體的匹配行;-n:列出匹配及行號;
#-s:不顯示不存在或無匹配檔案的錯誤資訊;-v:顯示不包含匹配文本的所有行;
#-w:匹配事詞;-x:匹配事行;-r:遞迴查詢,搜尋子目錄;-q:禁止輸出任何結果,以退出
#狀態來表示搜尋是否成功;-b:列印匹配行距檔案頭的位移量,以位元組為單位;
#-o:與-b結合使用,列印匹配詞距檔案頭的位移量,以位元組為單位;-E:使用擴充運算式
#-F:不使用Regex,以字串的字面意思進行搜尋
#需要特別注意的是,所說的出現次數是指連續出現,而不是總共出現的次數!!!
#"*"用法,字母m出現至少出現0次
grep "nam*3" name.txt
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/6E/42/wKioL1V33TajaXYwAACqEJVVZfA511.jpg" />
#"."用法,搜尋"na任一字元3"
grep "na.3" name.txt
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/6E/46/wKiom1V325HQiJPZAACd29BHrxA442.jpg" />
#搜尋以A開頭的行,並輸出行號
grep -n ^A a.txt
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/6E/42/wKioL1V33TfBJDPuAABmQf9ezkI667.jpg" />
#"$"用法,搜尋以10結尾的行
grep 10$ name.txt
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/6E/46/wKiom1V325LRhsWoAACccRe7KpE865.jpg" />
#"[]"用法,搜尋一個任意小寫字母后跟一個任一數字的行
grep [a-z][0-9] name.txt
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/6E/42/wKioL1V33TfxYPtNAADudjMPuBA205.jpg" />
#"\"用法,搜尋以*號開頭的行
grep ^\* name.txt
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/6E/46/wKiom1V325LjWyaYAADhMHchFwE322.jpg" />
#"\<\>"用法,搜尋出現name3的行
grep "\<name3\>" bkname.txt
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/6E/42/wKioL1V33Tiy8U7TAADPGKSIzzA292.jpg" />
#"\<n,\>"用法,搜尋數字0至少出現5次
grep "0\{5,}" bkname.txt
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/6E/46/wKiom1V325OSEMBKAACy1JQOmIs534.jpg" />
#"\<n,m\>"用法,搜尋數字7出現2次到3次的行
grep "7\{2,3\}" name.txt
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/6E/46/wKiom1V325OzffxVAACot_R-xe8406.jpg" />
#"?"、"+"、"()"和"|"屬於Regex擴充,需要使用-E參數
#"?"用法,搜尋包含nu或者num的行
grep -E "num?" bkname.txt
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/6E/42/wKioL1V33TnCGMfMAADAAspU8vA418.jpg" />
#"+"用法,搜尋字母t出現至少1次的行
grep -E "t+" bkname.txt
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/6E/46/wKiom1V325Syr9kVAACkl9TOPqY779.jpg" />
#"()"和"|"用法結合,搜尋包含nu或者num的行
grep -E "(nu|num)" bkname.txt
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/6E/42/wKioL1V33TmDNZlZAADMb0HJowo347.jpg" />
#多檔案搜尋包含name1的行,並輸出行號
grep name1 name.txt num.txt
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/6E/46/wKiom1V325TTW8qPAAB3CUi9cc8691.jpg" />
#顯示匹配行前後2行
grep -2 name2 name.txt
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/6E/42/wKioL1V33TryON0_AACRSj5Vm4M877.jpg" />
#顯示匹配行的
grep -A2 name2 name.txt
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/6E/46/wKiom1V325XRJ_IOAAClvywgC8k999.jpg" />
#-c:用法,統計空白行數量
grep -c ^$ /etc/httpd/conf/httpd.conf/
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/6E/42/wKioL1V33TrxnQTsAAB3LKFdzug070.jpg" />
#-i:忽略大小寫
grep -i name bkname.txt
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/6E/46/wKiom1V325XiBbNuAADDuwUm07M190.jpg" />
#-h:多檔案查詢不顯示檔案名稱
grep -h test bkname.txt num.txt
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/6E/42/wKioL1V33TuQe8P0AADl-Ax1IQU529.jpg" />
#-n:顯示匹配行和行號
grep -n test bkname.txt
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/6E/46/wKiom1V325aC3RWKAACzosNmCRQ658.jpg" />
#-w:尋找的字串必需為完整的單詞;
#-x:顯示完全符合要求的行,而且所搜尋的字串必需是單獨一行
grep -w test bkname.txt
grep -x test bkname.txt
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/6E/42/wKioL1V33TuT4oxaAABpVEpjAog323.jpg" />
本文出自 “愛就行動” 部落格,請務必保留此出處http://1055745601.blog.51cto.com/5003160/1660406
shell指令碼(四)