Linux中命令grep與基本正則表達式

grepglobal searching regular expression and printing 正則表達式

grep命令的做用至關於關係數據庫中的選擇操做,意爲查找某些符合條件的行(即元組)。 數據庫

grep命令的使用格式爲:grep [options] pattern file。其中options爲實現某些特定功能的選項;pattern爲要匹配的字符串模式;file爲所查找的文件。 express

此命令中最核心的部分是pattern,若是pattern爲某一字符串,此命令即表示在指定文件file中查找有此字符串的行。例如:grep root /etc/passwd,表示在文件/etc/passwd中查找出現字符串root的行。 ide

pattern更普遍的用途是經過使用正則表達式所匹配的字符串模式,查找含有更復雜的字符串的行。正則表達式是由各元字符與普通字符所構成的,如下說明基本正則表達式中各元字符的做用: spa

一、^」表示錨定行首。例如grep ^root /etc/passwd表示在文件/etc/passwd中查找以root爲行首的行。 字符串

二、$」表示錨定行尾。例如grep root$ /etc/passwd表示在文件/etc/passwd中查找以root爲行尾的行。 it

配合上述「^」的使用,例如^$表示空白行,^root$表示字符串root自成一行等。 io

三、.」表示任意單個字符。如模式a.b表示a以後跟任意字符,以後跟babbacbaab等均符合此模式。 class

四、*」表示緊挨其前的字符出現任意次。如模式a*b,凡是b以前出現任意次a的字符串均符合此模式(包括零次),符合此模式的例如aabaaabbacb等。其中「b」是a出現零次的狀況;「acb」符合是由於其中包含「b」,即此行有符合a*b模式的字符串,而不是說「acb」總體符合模式a*b file

配合「.」的使用,.*表示任意長度的任意字符。

五、[...]」表示從「[]」中選擇一個字符。如模式[a-z]表示從字母az中任選一個字符。例如abc等均符合此模式。

[^...]」表示在標明範圍外的任意一個字符。如模式[^a-z]表示從字母az以外的範圍任選一個字符。如A,B,C,1,2,3,均符合此模式。

6\?」表示緊挨其前的字符出現01次。如模式a\?b,表示b以前出現0次或1a的字符串。符合此模式的例如abbacab等。

七、\{m,n\}」表示緊挨其前的字符出現最少m次,最多n次。如模式a\{1,3\}b,表示b以前出現13次。abaabaaab均符合此模式。

八、\<」,「\>」分別表示錨定詞首,錨定詞尾。如模式\<stand表示以stand爲開頭的詞(有可能不是真正的單詞,而只是字符串),例如standstandard均符合此模式。同理有模式「\>」錨定詞尾。如模式t\>表示以t爲結尾的詞(或字符串),例如antout均符合此模式。

若是想在某文件中查找有某單詞的行,則需同時錨定詞首詞尾。如模式\<word\>表示查找文件中包含單詞「word」的行。

九、\(...\)」表示字符串的分組。如模式\(ab\)\{1,3\}表示字符串ab出現13次的行。此外如想表示以後某處出現以前某處出現過的字符串,而以前某處的字符串還未肯定,亦可以使用此元字符。如想表示在a.b以後有任意長度的任意字符,以後又出現了符合模式a.b的字符串,且後來出現的ab之間的字符與以前ab之間的字符一致。此種狀況可用表達式\(a.b\).*\1表示,其中\1表示此表達式中第一個\(...\)所圈定的內容;如要表示第二個\(...\)中的內容則使用\2表示,依次類推。

經過以上各元字符的綜合使用,就能夠查找符合匹配條件的字符串了。

相關文章
相關標籤/搜索