1. 程式人生 > >2.6-grep及正則表達式

2.6-grep及正則表達式

grep及正則表達式

grep:

Linux上文本處理三劍客

grep:文本過濾(模式:pattern)工具

grep,egrep,fgrep(fast grep)

sed:stream editor,文本編輯工具

awk:Linux上的實現gawk,文本報告生成器


grep:Global search Regular expression and Print out the line

作用:文本搜索工具,根據用戶指定的“模式”對目標文本逐行進行匹配檢查,打印匹配到的行

模式:由正則表達式字符及文本字符所編寫的過濾條件

正則表達式:又稱規則表達式,英文名為Regular Expression,正則表達式是對字符串(包括普通字符(例如,a 到 z 之間的字母)和特殊字符(稱為“元字符”))操作的一種邏輯公式,就是用事先定義好的一些特定字符、及這些特定字符的組合,組成一個“規則字符串”,這個“規則字符串”用來表達對字符串的一種過濾邏輯

分兩類:

基本正則表達式:BRE

擴展正則表達式:ERE

grep -E,egrep

正則表達式引擎:檢查匹配與否的程序

grep [OPTIONS] PATTERN [FILE...]

選項:

--color=auto:對匹配的結果自動著色顯示

-v:顯示不能夠被pattern匹配到的行

-i:忽略字符大小寫

-o:僅顯示匹配到的字符串

-q:靜默模式,不輸出任何信息

-A #:匹配到之後,顯示本行及後#行

-B #:匹配到之後,顯示本行及前#行

-C #:匹配到之後,顯示本行及前後#行

-E:使用ERE


基本正則表達式元字符:

字符匹配

.:匹配任意單個字符

[]:匹配指定範圍內的任意單個字符

[^]:匹配指定範圍外的任意單個字符

[:digit:],[:lower:],[:upper:],[:alpha:],[:alnum:],[:punct:],[:space:]

匹配次數:用在要指定次數的字符後面,用於指定前面的字符要出現的次數

*:匹配前面的字符任意次

例如:grep "x*y"

abxy

xay

xxxxxxy

x

.*:任意長度的任意字符

\?:匹配前面的字符0或1次:即前面的可有可無

\+:匹配前面的字符至少1次

\{m\}:匹配前面的字符m次

\{m,n\}:匹配前面的字符至少m次,至多n次

\{0,n\}:匹配前面的字符至多n次

\{m,\}:匹配前面的字符至少m次

位置錨定

^:行首錨定:用於模式的最左側

^root

$:行尾錨定:用於模式的最右側

^PATTERN$:用於模式匹配整行

^$:空行

^[[:space:]]*$:匹配空行,或者是非空空行

\< 或 \b:詞首錨定:用於單詞模式的左側

\> 或 \b:詞為錨定:用於單詞模式的右側

\<PATTERN>\:匹配整個單詞

分組

\(\):將一個或多個字符捆綁在一起當作一個整體進行處理

例如:\(xy\)*ab

Note:分組括號中的模式匹配到的內容會被正則表達式引擎記錄於內部變量中,這些變量的命名方式為:\1,\2,\3,......

\1:從左側起,第一個左括號以及與之匹配的右括號之間的模式所匹配到的字符:

\(ab\+\(xy\)*\)

\1:ab\+\(xy\)*

\2:xy

後向引用:引用前面分組括號中的模式所匹配的字符,(而非模式本身)


聯系:

1.顯示/proc/meminfo文件中以大小寫s開頭的行:(要求:使用兩種方式)


2.顯示/etc/passwd文件中不以/bin/bash結尾的行:

3.顯示/etc/passwd文件中UID號最大用戶的用戶名


4.如果root存在,顯示其默認的shell程序


5.找出/etc/passwd中的兩位或三位數


6.顯示/etc/rc.d/rc.sysinit文件中:至少以一個空白字符開頭的且後面存在非空白字符的行

7.找出“netstat -tan”命令結果中以"LISTEN"後跟0,1或多個空白字符結尾的行

8.添加用戶bash,testbash,basher以及nologin(其shell為/sbin/nologin):而後找出/etc/passwd文件中用戶名同shell名的行

2.6-grep及正則表達式