1、grep: Global search REgular expression and Print out tht line
文本搜索工具,根據用戶指定的模式對目標文本進行逐行匹配檢查;打印匹配到的行
模式:由正則表達式字符及文本字符所編寫的過濾條件
選項:
- –color=auto 對匹配到的文本著色顯示
- -v 顯示沒有被匹配到的行
- -i 忽略大小寫匹配
- -n 顯示匹配到的行號
- -c 統計匹配到的行總數
- -o 僅顯示匹配到的字符串
- -q 靜默模式,不輸出任何信息
- -A #: 同時顯示匹配行后的#行
- -B #: 同時顯示匹配行前的#行
- -C #: 同時顯示匹配行前后的#行
- -e 實現多選項之間的邏輯或關系(grep -e ‘cat’ -e ‘dog’ file)
- -w 匹配整個單詞 -E egrep -F fgrep
2、正則表達式
規則查看: man 7 regex
元字符分類:字符匹配、匹配次數、位置、分組
字符匹配:
- . 匹配任意單個字符
- [] 匹配指定范圍內的任意單個字符? ?[^] 匹配指定范圍外的任意單個字符
- [:lower:] 小寫字母
- [:upper:]
- [:alpha:]
- [:digit:] 十進制數字
- [:alnum:] 字母和數字
- [:xdigit:] 十六進制數字
- [:blank:] 空白字符(空格和制表符)
- [:space:] 水平和垂直的空白字符
- [:cntrl:] 不可打印的控制字符
- [:graph:] 可打印的非空白字符
- [:print:] 可打印字符
- [:punct:] 標點符號
匹配次數:
- * 匹配前面的字符任意次,貪婪模式:盡可能長的匹配 (.* 匹配任意長度的任何字符)
- \? 匹配前面的字符0或1次
- \+ 匹配前面的字符至少一次
- \{n\} 匹配前面的字符n次? \{n,m\} 匹配前面的字符n-m次? \{,m\}? \{n,\}
位置錨定:定位字符出現的位置
- ^ 行首;$ 行尾 (^$ 空白行; ^pattern$ 模式匹配整行 ;^[[:space:]]$ 空白行)
- \<或者\b 詞首錨定,用于單詞模式的左側
- \<或者\b 詞尾錨定,用于單詞模式的右側;單詞邊界:除了字母、數字、下劃線_ (\<pattern\> 匹配整個單詞)
分組: \(pattern\),將括號中的模式當作一組進行處理。分組括號中的模式匹配到的內容會被正則表式引擎記錄于內部的變量中,這些變量的命名方式為:\1 \2 \3 。\1 表示從左側起第一個左括號以及與之匹配的右括號之間的內容
后向引用:引用前面分組括號中模式匹配到的內容,并非模式本身
邏輯: \| 或
示例: 用到正則表達式的匹配模式需要用引號引起來
1、獲得本機的ip地址
- ifconfig eth0|grep “inet addr”|egrep -o “([[:digit:]]{1,3}\.){3}[[:digit:]]{1,3}”|head -1
- ifconfig eth0|grep “inet addr”|egrep -o “.*Bcast:”|egrep -o “\b[[:digit:]\.]*\b”
- 更準確的取法: ifconfig eth0|grep “inet addr”|egrep -o “(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])”
2、查找centos6中的系統用戶,輸出起用戶名和uid
- cut -d: -f1,3 /etc/passwd|grep -E “(\b[0-9]|[1-9][0-9]|[1-4][0-9][0-9])$”
3、查找centos系統的主版本號:
- grep -o ” [0-9]” /etc/centos-release|tr -d? ” “
4、找出//etc/passwd中用戶名和shell同名的行
- grep ‘^\([^:]*\)\b.*\/\1$’ /etc/passwd
5、取路徑的基名
- echo “/etc/rc.d/init.d/” |egrep -o “[^/]*/?$”|tr -d “/”
6、取路徑名
- echo “/etc/rc.d/init.d/” |egrep -o “.*[^/]+”|egrep -o “.*/”|egrep -o “.*[^/]+”
本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/86694