LINUX學習—grep和正則表示式(LINUX三劍客)
阿新 • • 發佈:2018-11-19
grep, egrep, fgrep
grep(GLOBAL RESEARCH)
是一種強大的文字搜尋工具,它能使用正則表示式搜尋文字,並把匹配的行打印出來。根據模式,搜尋文字,並將符合模式的文字行顯示出來。只能使用基本正則表示式 要使用擴充套件正則表示式需要-E
pattern: 由文字字元和正則表示式的元字元組合而成的匹配條件
語法:grep [option] pattern [FILE…]
1. Option:
-w:只顯示全字元符合的列;
-i:忽略大小寫;
--color:將匹配到的文字加以顏色顯示;
-v:反向查詢,即顯示沒有被匹配的行;
-o:只顯示被模式匹配到的字串;
-E:使用擴充套件正則表示式;
-A n:表示顯示匹配到的字元其後n行;
-B n:表示顯示匹配到的字元其前n行;
-C n:表示顯示匹配到的字元其前後各n行;
2. Pattern
正則表示式:Regular Expression, REGEXP
正則表示式是對字串操作的一種邏輯公式,即用事先定義好的一些特定字元及這些特定的字元組合,組成一個“規則字串”,這個“規則字串”用來表達對字串的一種過濾邏輯。
主要是對字串(包括普通字元如a-z間的字母)和特殊字元(如元字元)進行操作的一種邏輯公式
- 元字元:
. :匹配任意單個字元
[ ]:匹配指定範圍內的任意單個字元;
[^]: 匹配指定範圍外的任意單個字元;
- 字元集合:
[:digit:]:數字
[:lower:]:小寫字母
[:upper:]:大寫字母
[:punct:]:標點符號
[:space:]:空白字元
[:alpha:]:所有字母
[:alnum:] :所有數字
在使用這些字元集合是還需要用[ ]將其括起來即 [[:digit:]]
匹配次數(貪婪模式):
* :匹配其前面的字元任意次;a, b, ab, aab,acb,amnb; a*b可以匹配(b,ab,aab),其他的都不行;
.* :任意長度的任意字元
\?:匹配其前面的字元1次或0次,使用時一般需要加轉義字元\(有部分匹配就行,並不一定要求整行都匹配);
{m.n}:匹配其前面的字元至少m次,至多n次; {1,} ; {0,3} ,沒有上限可將n省略(花括號在linux中表示展開,用\對其進行轉義)位置錨定:
^:錨定**行首**,此字元後面的任意內容必須出現在行首; $:錨定**行尾**,次字元前面的任意內容必須出現在行尾; ^$:空白行
\<或\b:其後面的任意字元必須作為單詞首部出現,錨定詞首 \
擴充套件正則表示式egrep:
字元匹配:
./[ ]/[^]與基本正則表示式一致次數匹配:
*:相同,匹配前面的字元任意次
?:其前字元0次或1次,不用加\
+:匹配其前面的字元至少1次
{m, n}:不需要使用\
位置錨定字元都一樣:
^ /$/ \
():分組,不需要加\
\1, \2, \3, .....
|:或者 a|b 表示a或者b, C|cat表示C或cat而不是Cat或cat,分組可實現Cat或cat grep -E --color '(C|c)at' file
+:匹配其前面的字元至少1次
\.:表示對元字元進行轉義,為其本身含義