天天看點

菜鳥學Linux 第013篇筆記 grep及正規表達式

菜鳥學Linux 第013篇筆記 grep及正規表達式

正規表達式:REGular EXEpression, REGEXP

Basic REGEXP: 基本

Extended REGEXP: 擴充

文本查找:

grep, egrep, fgrep

grep: Global Research

使用基本正規表達式定義的模式來過濾文本的指令

根據模式搜尋文本,并将符合模式的文本行顯示出來

pattern: 文本字元和正規表達式的元字元組合而成的比對條件]

command

grep (grep, egrep, fgrep - print lines matching a pattern)

-i, --ignore-case

--color Surround  the  matching  string  with  the  marker find in

GREP_COLOR environment  variable.

-v, --invert-match

Invert(倒置,反轉)  the  sense  of  matching,  to  select non-matching

            lines.

-o, --only-matching

              Show  only  the  part of a matching line that matches PAT-TERN.

-E, --extended-regexp

              Interpret(解釋,說明)  PATTERN  as an extended regular expression (see

              below).

-A NUM, --after-context=NUM(number)

              Print  NUM lines of trailing(結尾) context after matching lines.

              Places a line containing -- between contiguous(adj.相鄰的)  groups  of

              matches.

-B NUM, --before-context=NUM

              Print NUM lines of leading(頭) context before matching  lines.

              Places  a  line containing -- between contiguous groups of

-C NUM, --context=NUM

              Print NUM lines of output context(上下).  Places a line contain-

              ing -- between contiguous groups of matches.

元字元:比對字元

. 表示比對任意字元

.* 表示比對任意字元任意長度

[] 比對指定範圍内的任意字元

[^] 比對指定範圍外的任意字元

字元集 [:digit:], [:lower:], [:upper:], [:punct:], [:space:],

[:alpha:], [:alnum:]

比對次數(貪婪模式)

* 表示比對其前面的字元任意次

\? 表示比對其前面的字元1次或0次

\{m,n\} 表示比對其前面的字元至少m次,至多n次

位置錨定

^ 錨定行首,此字元後邊的模式比對必須出現在行首

$ 錨定行尾,此字元前邊的模式比對必須出現在行首

^$ 表示空白行

\<或\b 錨定詞首,表示其後面的任意字元必須作為單詞首部出現

\>或\b 錨定詞尾,表示其前面的任意字元必須為單詞的尾部出現

分組:

\(\) 表示一個組,組裡邊的内容被看為整體,并且可以在後用某個字元來引用前邊的分組

\1 表示引用前邊從左起第1個左括号開始到與之對應的右括号結束比對的内容

\2 ……

\n 表示引用前邊從左起第n個左括号開始到與之對應的右括号結束比對的内容

e.g.

\(ab\)* 比對ab在行裡可以出現0-n次

ab* 而不加則表示的是

grep '\(l..e\).*\1' test3.txt 

grep '\([0-9]\).*\1' /etc/inittab 

小練習(翻譯含義)

grep '[[:digit:]]$' /etc/inittab 

grep '[[:space:]][[:digit:]]$' /etc/inittab 

grep '\broot\b' test2.txt

grep 'root\>' test2.txt

grep '\<root' test2.txt

擴充正規表達式grep -E= egrep

字元比對:

. 表示比對任意字元(同正則)

.* 表示比對任意字元任意長度(同正則)

[] 比對指定範圍内的任意字元(同正則)

[^] 比對指定範圍外的任意字元(同正則)

次數比對:

* 表示比對其前面的字元任意次(同正則)

? 表示比對其前面的字元1次或0次(同正則)

+ 比對其前面的字元至少一次

{m,n} 同正規表達式隻是不需要插入轉譯字元'\'

位置錨定:

^ 錨定行首,此字元後邊的模式比對必須出現在行首(同正則)

$ 錨定行尾,此字元前邊的模式比對必須出現在行首(同正則)

^$ 表示空白行(同正則)

\<或\b 錨定詞首,表示其後面的任意字元必須作為單詞首部出現(同正則)

\>或\b 錨定詞尾,表示其前面的任意字元必須為單詞的尾部出現(同正則)

分組的:含義相同隻是不需要轉譯字元'\'(同正則)

()

\1, \2, \n ..

或者

C|cat C或cat

grep -E 'C|cat' test6.txt 比對 C 或cat 

grep -e '(C|c)at' text6.txt 比對 Cat 或 cat

練習:

1、找出某檔案中的,1位數,或2位數;

2、找出ifconfig指令結果中的1-255之間的整數;

3、查找目前系統上名字為user8(必須出現在行首)使用者的賬号的相關資訊,/etc/passwd;

KEY

1、#grep -E '[[:digit:]]{1,2}' /proc/cupinfo

2、#ifconfig | egrep --color '\<([1-9]|[1-9][1-9]|1[0-9][0-9]|2[0-9][0-9])\>'

3、#grep -E '^(user8)' /etc/passwd

本文轉自Winthcloud部落格51CTO部落格,原文連結http://blog.51cto.com/winthcloud/1861361如需轉載請自行聯系原作者

Winthcloud

繼續閱讀