Linux文本處理三劍客:
1、grep : 文本過濾(模式:pattern)工具
2、sed? : (stream editor),文本編輯工具
3、awk : Linux上的實現gawk,文本報告生成器
1、文本處理工具grep
作用:文本搜索工具,根據用戶指定的“模式”對目標文本逐行進行匹配檢查;打印匹配到的行。
模式:由正則表達式字符及文本字符所編寫的過濾條件。
(grep 支持標準正則表達式;?egrep ?支持擴展正則表達式,相當于grep -E ;?fgrep ?不支持正則表達式)
- ????語法:grep? [OPTIONS]? PATTERN? [FILE…]
????選項:
–color=auto: 對匹配到的文本著色顯示
-v: 顯示不能夠被pattern匹配到的行
-i: 忽略字符大小寫? 常用
-n: 顯示匹配的行號,匹配到的是第幾行??常用
-c: 統計匹配的行數,匹配到了多少行?常用
-o: 僅顯示匹配到的字符串??常用
-q: 靜默模式,不輸出任何信息
-A #: after, 后#行,包含匹配到的行,還顯示匹配到的行的后幾行
-B #: before, 前#行,包含匹配到的行,還顯示匹配到的行的前幾行
-C #: context, 前后各#行,包含匹配到的行外,還顯示匹配到的行的前后各幾行
-e:實現多個選項間的邏輯or關系 ,多個-e 之間是或關系(grep –e? ‘cat’? -e? ‘dog’? file)?常用
-w:整行匹配整個單詞,只能匹配整個單詞(字母、數字、下劃線都算單詞一部分)
-E:使用ERE,相當于egrep??常用
-F:相當于fgrep,不支持正則
2、正則表達式
REGEXP:由一類特殊字符及文本字符所編寫的模式,其中有些字符(元字符)不表示字符字面意義,而表示控制或通配的功能。(man? 7? regex)
分為兩類:基本正則表達式:BRE
擴展正則表達式:ERE
基本正則表達式元字符:字符匹配、匹配次數、位置錨定、分組
- 字符匹配:
????????????.? ? ?匹配任意單個字符;
[]? ? 匹配指定范圍內的任意單個字符
[^]? ? 匹配指定范圍外的任意單個字符
[:digit:]? ?十進制數字 ([0-9]也可,匹配10-19之間的數字不能寫成[10-29],要每一位分別寫[1-2][0-9])
[:lower:]? ?小寫字母
[:upper:]? ?大寫字母
[:alpha:]? ? 任何英文大小寫字符
[:alnum:]? ?字母和數字
[:space:]? ? ? 空白字符(水平和垂直的空白字符,比[:blank:]? 包含范圍廣)
[:punct:]? ? ?標點符號
[:blank:]? ?空白字符(空格和制表符)
[:cntrl:]? ?不可打印的控制字符(退格、刪除、警鈴…)
[:graph:]? ?可打印的非空白字符
[:print:]? ?可打印字符
- 匹配次數:用在要指定次數的字符后面,用于指定前面的字符要出現的次數
????????????*? ? 匹配前面的字符任意次,包括0次 (貪婪模式:盡可能長的匹配)
.*? ? 任意長度的任意字符
\?? ? 匹配其前面的字符0或1次
\+? ? 匹配其前面的字符至少1次
\{m\}? ? 匹配前面的字符m次
\{m,n\}? ? 匹配前面的字符至少m次,至多n次
\{,n\}? ? 匹配前面的字符至多n次
\{m,\}? ? 匹配前面的字符至少m次
- 位置錨定:定位出現的位置
????????????^? ? 行首錨定,用于模式的最左側(^PATTERN)
$? ? 行尾錨定,用于模式的最右側(PATTERN$)
^PATTERN$? ? 用于模式匹配整行(? ^$? ? 空行? ?? ? ?^[[:space:]]*$?? ? 水平或垂直空白行? ? ?)
\< 或 \b? ? 詞首錨定,用于單詞模式的左側
\> 或 \b? ? 詞尾錨定;用于單詞模式的右側
\<PATTERN\>? ? 匹配整個單詞
- 分組: \(\):將一個或多個字符捆綁在一起,當作一個整體進行處理,如\(root\)\+表示root至少出現一次。
? ? ? ? ? ? ? ?后向引用:引用前面的分組括號中的模式所匹配字符(而非模式本身)
利用: \1, \2, \3, …來引用前面從左到右第一個括號、第二個括號…匹配到的內容
如: \(bican\+\(bc\)*\)
\1? 匹配? ? ? bican\+\(bc\)*
\2? 匹配? ? ? bc
- ? ? ? ?或者:\|
? ? 示例:? a\|b? 表示a或b? ? ? ? ?C\|cat? 表示C或cat? ? ? ? \(C\|c\)at? ?表示Cat或cat
擴展正則表達式元字符
- 字符匹配(同基本正則表達式)
- 匹配次數
? ? ? ? ? ? ?*? ? 匹配前面的字符任意次,包括0次 (貪婪模式:盡可能長的匹配)
?? ? 匹配其前面的字符0或1次
+? ? 匹配其前面的字符至少1次
{m}? ? 匹配前面的字符m次
{m,n}? ? 匹配前面的字符至少m次,至多n次
{,n}? ? 匹配前面的字符至多n次
{m,}? ? 匹配前面的字符至少m次
- 位置錨定(同基本正則表達式)
- 分組 :? ?()? ? ?后向引用:? \1? ? \2
- 或者:? |? ? ? ? ? ? ?示例:? ?(C|c)at? ?表示Cat或cat
本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/96487