grep:根據模式搜尋文字,並將符合模式的文字行列印出來
-i:忽略大小寫
-v:搜尋不符合模式的文字行
-o:列印完全匹配的字元
--color:匹配的字元高亮
-a num:列印匹配的文字行以及文字的後num行
-b num:列印匹配的文字行以及文字的前num行
-c num:列印匹配的文字行以及文字的前後num行
pattern:由文字字元和正規表示式的元字元組合而成
回顧下檔名匹配規則:
*:匹配任意長度的任意字元
?:匹配任意單個字元
:指定某個範圍內的單個長度字元
[^]:指定某個範圍外的單個長度字元
字元集合:
[:space:]:空字元
[:digit:]:數字
[:lower:]:小寫字母
[:upper:]:大寫字母
[:alpha:]:大小寫字母
[:alnum:]:大小寫字母以及數字集合
正規表示式:regular expression
基本正規表示式:basic
擴充套件正規表示式:extended 命令:egrep,可以使用+,|等元字元
元字元:
.:匹配任意單個字元
:範圍內的單個字元
[^]:範圍外的單個字元
字元集合:
[:space:]:與檔名匹配規則一樣還有[:digit:]....等等
匹配次數(貪婪模式:就是盡可能最大化匹配,比如asabkslbss,我們使用a.*b模式時,它會匹配asabkslb,而不是asab)
*:匹配其前面的字元任意次數
.*:任意長度的任意字元
\?:匹配其前面的字元0次或一次
\:至少匹配m次,至多匹配n次
為什麼使用\轉義等價於 ls -l /etc/passwd /etc/shadow),如果不加轉義的會誤解
位置錨定:
^:以其後面字元為行首的行
$:以其前面字元為行尾的行
^$:空白行
\《或\b:以其後面字元為詞首的行
\>或\b:以其前面字元為詞尾的行
分組:\(\)
後向引用
\1:引用第1個左括號以及與之對應的右括號所包含的所有內容
\2:引用第2個左括號以及與之對應的右括號所包含的所有內容
\3: ....
regexp中詞的概念:詞與詞之間以特殊字元作為分隔符其他字元視為詞的一部分比如sadjk&jj23342^&這個可以視為兩個詞 sadjk和jj23342
普通正規表示式示例:
假設文字行中包含:a,b,ab,aab,acb,adb,amnb(每個單詞為一行,否則失去意義),請問a*b,a\?b,a.*b,分別匹配哪些文字行
答案:a*b匹配b,ab,aab,但是因為grep是部分匹配所以除了a,其他文字行都會顯示出來,用grep --color可以看到匹配到的字元
a\?b:匹配b和ab,一樣由於部分匹配的原因,除了a,其他的也會顯示
a.*b:匹配ab,aab,acb,adb,amnb。
[root@logstach tmp]# cat test.txt ab
abaab
acbadb
amnb
[root@logstach tmp]# grep a*b test.txt
[root@logstach tmp]# grep 'a*b' test.txtbab
aabacb
adbamnb
[root@logstach tmp]# grep 'a?b' test.txt
[root@logstach tmp]# grep 'a\?b' test.txtbab
aabacb
adbamnb
[root@logstach tmp]# grep 'a.*b' test.txt
abaab
acbadb
amnb
詞首詞尾錨定示例:
[root@logstach tmp]# cat test.txt
he is a sb
he is a bigsb
sb250 is him
250sb also is him
[root@logstach tmp]# grep 'sb\>' test.txt
he is a sb
he is a bigsb
250sb also is him
[root@logstach tmp]# grep '\he is a sb
sb250 is him
[root@logstach tmp]# grep '\' test.txt
he is a sb
sb\>錨定以sb作為詞尾的單詞,所以匹配sb、bigsb、250sb,同樣地\\完全錨定sb。
分組後向引用示例:
[root@logstach tmp]# cat test.txt
he love his lover.
she like her lover.
he like his liker
she love her liker.
假設我們要在上述文字行中找到類似於love ...lover 這種前後對應的行,而不要love...liker這樣額行,我們可以這樣做:
[root@logstach tmp]# grep '\(l..e\).*\1' test.txt
he love his lover.
he like his liker
解析:l..e匹配like和love,括號括起來表示這裡作為乙個分組,.*表示中間跟任意乙個字元,\1表示引用第乙個分組。
擴充套件正規表示式:
字元匹配:.
[^]字符集:
次數匹配:
*:?:
+:匹配其前面的字元至少一次 (相當於)
:m值不能為空 (基本正則也一樣)
位置錨定:^$
\<
\>
分組:():
\1 ,\2 ,\3...
或者|:or
示例:c|cat:表示匹配c或者cat,而不是cat或者cat
[root@logstach tmp]# cat test.txt
catcat
cchina
cat123
[root@logstach tmp]# egrep 'c|cat' test.txt
catcat
cchina
cat123
[root@logstach tmp]# egrep '\' test.txt
catcat
cchina
cat123
[root@logstach tmp]# egrep --color '\<(c|cat)\>' test.txt
catc
注意:這裡要想完全匹配c|cat,則必須使用分組(),否則\會被認為以c為詞首或者以cat為詞尾的單詞,我們把china變成小寫china,則會被過濾:
[root@logstach tmp]# cat test.txt
catcat
cchina
cat123
[root@logstach tmp]# egrep --color '\' test.txt
catcat
ccat123
問題:用egrep過濾出ifconfig顯示的所有可用ip
ipv4:
a:1-127
b:128-191
c:192-223
答案:(不唯一)
ifconfig |egrep --color '\<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-1][0-9]|22[0-3])\>(\.\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4])\>)\.\<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4])\>'
grep正規表示式
grep的工作方式是這樣的,它在乙個或多個檔案中搜尋字串模板。如果模板包括空格,則必須被引用,模板後的所有字串被看作檔名。搜尋的結果被送到螢幕,不影響原檔案內容。grep可用於shell指令碼,因為grep通過返回乙個狀態值來說明搜尋的狀態,如果模板搜尋成功,則返回0,如果搜尋不成功,則返回1,如果...
Grep正規表示式
grep正規表示式 要用好grep這個工具,其實就是要寫好正規表示式,所以這裡不對grep的所有功能進行例項講解,只列幾個例子,講解乙個正規表示式的寫法。ls l grep a 通過管道過濾ls l輸出的內容,只顯示以a開頭的行。grep test d 顯示所有以d開頭的檔案中包含test的行。gr...
grep正規表示式
文字查詢需要grep global research 根據模式,搜尋文字,並將符合模式的文字行顯示出來。pattern 文字字元和正規表示式的元字元組合而成的匹配條件 man grep 檢視幫助 查詢 etc passwd檔案包含root的內容 root iz233y80y23z grep root...