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表示,依次类推。

经过以上各元字符的综合使用,就能够查找符合匹配条件的字符串了。

相关文章
相关标签/搜索