菜鳥學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