1. 程式人生 > >謝煙客---------Linux之文本處理三劍客之egre、fgrep

謝煙客---------Linux之文本處理三劍客之egre、fgrep

linux基礎

egrep是grep的另一種模式,用-E選項(啟用或關閉命令的某個或某些功能),啟用擴展正則表達式引擎功能,使用擴展正則表達式的字符純文本字符組合的PATTERN,對文本流逐行匹配檢查,將匹配到的字符串所在的行顯示至標準輸出

fgrep,grep -F選項,關閉正則表達式引擎功能,以純文本字符組合為PATTERN,基於獨有的算法,對文本進行高效的匹配檢查,將匹配到的字符串所在的行顯示至標準輸出


egrep命令

[[email protected] ~]# type egrep
egrep is aliased to `egrep --color=auto‘
[[email protected]
/* */ ~]# which --skip-alias egrep /usr/bin/egrep [[email protected] ~]# egrep --help #獲取使用幫助 Usage: grep [OPTION]... PATTERN [FILE]... -E, --extended-regexp #ERE #其幫助內容同grep命令的使用內容


-E選項, grep -E 相當於 egrep

# grep -E ‘^root\b‘ /etc/passwd
# egrep ‘^root\b‘ /etc/passwd

技術分享


擴展正則表達式字符

字符匹配

匹配次數

位置錨定



字符匹配

1) . 任意單個字符

2) [] 指定範圍內的任意單個字符, [abc] a或b或c

3) [^] 指定範圍外的任意單個字符


使用示例

[[email protected] ~]# vim a.txt #vim是一個文本編輯命令,進入後按i鍵,才可編寫文本,編寫完畢後。按esc鍵,再按shift 加 : 鍵,輸入wq加Enter鍵即可。
how are you?
hwo old are you?
HOW ARE YOU?
HWO OLD ARE YOU?
root:x:0:0:root:/root:/bin/bash

. 匹配任意單個字符

# egrep  ‘r..t‘ a.txt

技術分享

[] 匹配指定範圍內的任意單個字符, [abc] a或b或c

# egrep  ‘[eFH]‘ a.txt

技術分享

[^] 表示指定範圍外的任意單個字符, [^abc] 非a和b和c

# egrep  ‘[^eFH]‘ a.txt

技術分享


次數匹配 前面單個字符出現的次數

1)* 匹配前面單個字符,出現0、1或多次

2)? 匹配前面單個字符,出現0或1次

3)+ 匹配前面單個字符,出現至少1次,>=1次

4){m} 精確匹配前面單個字符m次

5){m,} 匹配前面單個字符,至少m次

6){,n} 至多n次

7){m,n} 至少m次,至多n次


使用示例

[[email protected] ~]# vim output_delimiter.txt
ab
cb
a12b
aab
abb
abababababababab


* 匹配前面單個字符,出現0、1或多次

# egrep ‘a*b‘ output_delimiter.txt

技術分享


.* 匹配 . 任意次,任意單個字符任意次,任意長度任意字符,(glob中的*)

# egrep  ‘r.*t‘ a.txt

技術分享


? 匹配前面單個字符,出現0或1次 (基本正則表達式中 \? )

# egrep ‘a?b‘  output_delimiter.txt 
# grep ‘a\?b‘  output_delimiter.txt

技術分享

技術分享


+ 匹配前面單個字符,出現至少1次,>=1次 (基本正則表達式中 \+ )

# egrep ‘a+b‘  output_delimiter.txt
# grep ‘a\+b‘  output_delimiter.txt

技術分享

技術分享


{m} 精確匹配前面單個字符m次 (基本正則表達式中 \{m\} )

# egrep ‘a{3}b‘ output_delimiter.txt
# grep ‘a\{3\}b‘ output_delimiter.txt

技術分享

技術分享


{m,} 匹配前面單個字符,至少m次 (基本正則表達式中 \{m,\} )

# egrep ‘a{3,}b‘ output_delimiter.txt
# grep ‘a\{3,\}b‘ output_delimiter.txt

技術分享

技術分享


{,n} 匹配前面單個字符至多n次 (基本正則表達式中 \{m,\} )

# egrep ‘a{,2}b‘ output_delimiter.txt
# grep ‘a\{,2\}b‘ output_delimiter.txt

技術分享

技術分享


{m,n} 匹配前面單個字符至少m次,至多n次 (基本正則表達式中 \{m,n\} )

# egrep ‘a{3,6}b‘ output_delimiter.txt
# grep ‘a\{3,6\}b‘ output_delimiter.txt

技術分享


位置錨定 期望匹配的字符必須出現在某個位置

1)^ 行首錨定,用於模式最左側。正則表達式所匹配到的字串符必須出現在行首

2)$ 行尾錨定,用於模式最右側。由正則表達式所匹配到的字串符必須出現在行尾

3)^pattern$: 整行只能匹配此模式

4)匹配空白行: ^[[:space:]]*$ 空白可有任意次數

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

6)\> 或 \b 詞尾錨定,用於單詞模式的右側

7) \<PATTERN\> 或 \bPATTERN\b 匹配整個單詞,用於單詞左右兩側

8)分組,後向引用 ()

^ 行首錨定,用於模式最左側。正則表達式所匹配到的字串符必須出現在行首

# grep -E ‘^root‘ /etc/passwd

技術分享



$ 行尾錨定,用於模式最右側。由正則表達式所匹配到的字串符必須出現在行尾

# grep -E ‘/bin/bash$‘ /etc/passwd

技術分享


^pattern$: 整行只能匹配此模式

# grep -E -c ‘^$‘ /etc/init.d/functions            #匹配空行
-c 顯示匹配到的字串所在行的所有行的行數


匹配空白行: ^[[:space:]]*$ 空白可有任意次數

# grep -E -c ‘^[[:space:]]*$‘ /etc/init.d/functions  #匹配可為空行或有空白字符的行


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

# grep -E ‘\broot‘ /etc/passwd


\> 或 \b 詞尾錨定,用於單詞模式的右側

# grep -E ‘root\b‘ /etc/passwd

\<PATTERN\> 或 \bPATTERN\b 匹配整個單詞,用於單詞左右兩側

# grep -E ‘\broot\b‘ /etc/passwd


( ) 分組, (基本正則表達式中 \(\) ) 將任意個字符當前同一個組件

# cat grep.txt 
abxy
xxxxxxy
xyxyxyxyabcxy
# grep -E ‘(xy)+‘ grep.txt

技術分享

技術分享


註意:

表示字符串本身時,如果使用的命令使用的正則表達式字符,有\,則不用\; 如果沒有\,則加\。

# grep -o ‘[[:alpha:]_]\+()‘ /etc/rc.d/init.d/functions  #正則表達式字符為 \( \)
grep -E -o ‘[[:alpha:]_]+\(\)‘ /etc/rc.d/init.d/functions #擴展正則表達式字符為 ( )


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

# grep -E ‘(^[[:alnum:]]+\>).*\1$‘ /etc/passwd

技術分享


[cCat] c或C或a或t

c|Cat c或Cat

(c|C)at cat 或 Cat

# vim dsdcI.txt
cat
Cat
c12
C123
at

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

# egrep ‘[cCat]‘ dsdcI.txt

技術分享

2、c|Cat 匹配c 或 Cat

# egrep ‘c|Cat‘ dsdcI.txt

技術分享

3、(c|C)at 匹配 cat 或 Cat

# egrep ‘(c|C)at‘ dsdcI.txt

技術分享


本文出自 “Reading” 博客,請務必保留此出處http://sonlich.blog.51cto.com/12825953/1952624

謝煙客---------Linux之文本處理三劍客之egre、fgrep