Linux-grep及Regex
來源:互聯網
上載者:User
文本尋找的需要:
grep,egrep,fgrep
grep:根據模式,搜尋文本,並將符合模式的問本行顯示出來、
模式(Pattern):文本字元和Regex的元字元組合而成的匹配條件
格式:grep [option] PATTERN file...
-i
--color
-v:顯示沒有被模式比對到的行
-o:只顯示被模式比對到的串
-E:使用擴充Regex =egrep
-A n:匹配行的after n行
-B n:匹配行的before n行
-C n:匹配行的前後 n行
對比之前學過的globbing:
*,。,[],[^]
man 7 glob
Regex:Regular Expression,REGEXP
注意:grep是整行的部分匹配(最長相符),顯示整行
Regex分類:
1、Basic REGEXP:基本
2、Extended REGEXP:擴充
元字元:
.表示匹配單個任一字元
[]:匹配指定範圍內的任意單個字元
[^]:匹配指定範圍外的任意單個字元
字元集合:[:space:][:digit:],[:lower:]...
匹配次數:
*:匹配其前面的字元任意次
a*b
a,b,ab,aab
.*:任意長度的任一字元
。:匹配其前面的字元1次或0次(一般要加一個轉譯字元\。)
\{m,n\}:匹配其前面的字元至少m次,至多n次
位置錨定:
^:錨定行首,此字元後面的任意內容必須出現在行首
$:錨定行尾,此字元後面的任意內容必須出現在行尾
eg:grep '^a.*a$' test.txtt #以a開頭和結尾的行
^$:空白行
\<或\b:其後面的任一字元必須作為單詞首部出現
\>或\b:其前面的任一字元必須作為單詞的尾部出現
eg:\<root\>:單詞必須是root,rootroot也不行
分組:
\(\)
eg:\(ab\)*,ab可以出現任意次
分組還有一個重要的用法是實現後向引用:
\1:引用第一個括弧分組
擴充的Regex:
字元匹配:
.
[]
[^]
次數匹配:
*
?:不用\
+:匹配其前面的字元至少1次
{m,n}
位置錨定:
^
$
\<
\>
分組:
():分組
\1,\2,\3...
或者
|:表示or
練習:
匹配1-255的數字
egrep '\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-9])\>' test.txt
匹配255.255.255.255這樣類型的數字串
egrep '(\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-9])\>\.){3}(\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-9])\>\.)' test.txt
為什麼不可以後面引用呢。
fgrep:不支援Regex,但是執行速度快