Linux 文本處理三劍客
grep:文本過濾工具(grep ;? egrep? ; fgrep)
grep :支持標準輸入(例如:grep? abc? 回車后輸入內容,可檢測出帶有abc的行)
-v? :顯示不被patter匹配的行
-i?? : 忽略大小寫
-n? :顯示出行號
-c? :統計匹配的行的數量
-q? :靜默模式,不輸出任何信息?? echo? $??? //可檢測出是否查找到信息(0查找到)
-o? :直接顯示匹配到的字符串
-A? :顯示出包含關鍵字的后續幾行
-B? : 顯示出包含關鍵字的前幾行
-C? : 顯示出包含關鍵字的前后幾行
-e? :代表或的關系(例如:-e? wang? -e? root?? //過濾出wang或mage? 的行)
-w? :匹配整個單詞
-E?? :(egrep)? 支持擴展的正則表達式
-F?? :(fgrep)? 不支持正則表達式
正則表達式(REGEXP):(匹配的是字符串)
正則表達式引擎:采用不同算法,檢查處理正則表達式的軟件模塊PCRE
man 7 regex??? //查看正則表達式的格式
元字符分類:字符匹配、匹配次數、位置錨定、分組
一.基本正則表達式(BRE)
字符匹配:
.??????? 匹配任意單個字符
[]?????? 匹配指定范圍內的任意一個字符
[^]???? 匹配指定范圍外的任意一個字符??????? [:print:]?????? 可打印字符
[:upper:]?? 任意大寫字母??????????? [:blank:]??? 空白字符(空格和制表符)
[:lower:]?? 任意小寫字母??????????? [:space:]??? 水平和垂直的空白字符
[:digit:]???? 任意數字???????????????? [:cntrl:]?? 不可打印的控制字符(退格、刪除、警鈴)
[:alpha:]???? 任意大小寫字母?????? [:puncct:]??? 標點符號
[:alnum:]?? 任意數字或字母??????? [:graph:]????? 可打印的非空白字符
grep? -o?? [[:digit:]]?? /etc/centos-release? |head –n1??? //取出centos版本號6或7
匹配次數:
*?? ?匹配前面的字符任意次,包括0次
.*?? 匹配任意長度的一個字符
\??? 前面的字符重復0次或1次
\+?? 前面的字符至少1次以上
\{n\}??? 匹配前面的字符n次
\{m,n\}?? 匹配前面的字符至少m次,至多n次
\{,n\}?? 匹配前面的字符至多n次
\{n,\}?? 匹配前面的字符至少n次
grep? -o? “ [0-9]\+”?? /etc/centos-release? |head –n1??? //取出版本號
ifconfig ens32? |grep? ” netmask”? | grep -o “[0-9.]\{7,\}” |head -n1?? //取出ip地址
ifconfig ens32? |grep? ” netmask”? | grep -o “[0-9]\{3\}\.[0-9]\{3\}\.[0-9]\{3\}\.[0-9]\{3\}” |head -n1
ifconfig ens32? |grep -o “inet [0-9.]\+”? |cut -d” ” -f2??? //取IP地址
df | grep sda |grep -o “[0-9]\{1,3\}%”|grep -o “[0-9]\+” |sort -nr? |head -n1? //分區
位置錨定:
^??? 行首錨定,用于模式的最左側
$??? 行尾錨定,用于模式的最右側
^PATTERN$???? 用于模式匹配整行
^$?? 空行
^[[:space:]]*$??? 空白行
\<?? 或? \b? 詞首錨定,用于單詞模式的左側
\>? 或? \b? 詞首錨定,用于單詞模式的右側
\<PATTERN\>?? 匹配整個單詞
grep? -v?? ^[[:space:]]*$??? f1???? //過濾文件的空白行
分組:
\(\)? 將一個或多個字符捆綁在一起,當做一個整體進行處理
\1??? 表示從左側起第一個括號以及與之匹配右括號之間的模式所匹配到的字符
反向引用:引用前面分組括號中的模式所匹配字符,并非模式本身
\|? 或?? (例如: a\|b???? ;?? (C\|c)at))
grep “^\(.*\):.*/\1$”? /etc/passwd??? //取出前后單詞一樣的行
二.擴展正則表達式(ERE):
次數匹配:
*??? 匹配前面字符任意次
??? ?0或1次
+?? 1次或多次
{m}?? 匹配m次
{m,n}:?? 至少m,至多n次
位置錨定:
^??? 行首錨定,用于模式的最左側
$??? 行尾錨定,用于模式的最右側
\<?? 或? \b? 詞首錨定,用于單詞模式的左側
\>? 或? \b? 詞首錨定,用于單詞模式的右側
分組:
()將一個或多個字符捆綁在一起,當做一個整體進行處理
后向引用:? \1? ,? \2
或 者: (例如: a|b???? ;?? (C|c)at))
echo /etc/rc.d/init.d/functions? |egrep -o? “[^/]*/?$”?? //取基名
[0-9]?????? 0-9
[1-9][0-9]????? 10-99
1[0-9][0-9]????? 100-199
2[0-4][0-9]?????? 200-249
25[0-5]?????????? 250-255
本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/95050