grep:global searching regular expression and printing。
grep命令的做用至关于关系数据库中的选择操做,意为查找某些符合条件的行(即元组)。
grep命令的使用格式为:grep [options] pattern file。其中options为实现某些特定功能的选项;pattern为要匹配的字符串模式;file为所查找的文件。
此命令中最核心的部分是pattern,若是pattern为某一字符串,此命令即表示在指定文件file中查找有此字符串的行。例如:grep root /etc/passwd,表示在文件/etc/passwd中查找出现字符串root的行。
pattern更普遍的用途是经过使用正则表达式所匹配的字符串模式,查找含有更复杂的字符串的行。正则表达式是由各元字符与普通字符所构成的,如下说明基本正则表达式中各元字符的做用:
一、“^”表示锚定行首。例如grep “^root” /etc/passwd表示在文件/etc/passwd中查找以root为行首的行。
二、“$”表示锚定行尾。例如grep “root$” /etc/passwd表示在文件/etc/passwd中查找以root为行尾的行。
配合上述“^”的使用,例如”^$”表示空白行,”^root$”表示字符串root自成一行等。
三、“.”表示任意单个字符。如模式”a.b”表示a以后跟任意字符,以后跟b。abb,acb,aab等均符合此模式。
四、“*”表示紧挨其前的字符出现任意次。如模式”a*b”,凡是b以前出现任意次a的字符串均符合此模式(包括零次),符合此模式的例如aab,aaab,b,acb等。其中“b”是a出现零次的状况;“acb”符合是由于其中包含“b”,即此行有符合”a*b”模式的字符串,而不是说“acb”总体符合模式”a*b”。
配合“.”的使用,”.*”表示任意长度的任意字符。
五、“[...]”表示从“[]”中选择一个字符。如模式”[a-z]”表示从字母a至z中任选一个字符。例如a,b,c等均符合此模式。
“[^...]”表示在标明范围外的任意一个字符。如模式”[^a-z]”表示从字母a至z以外的范围任选一个字符。如A,B,C,1,2,3,均符合此模式。
6“\?”表示紧挨其前的字符出现0到1次。如模式”a\?b”,表示b以前出现0次或1次a的字符串。符合此模式的例如ab,b,acab等。
七、“\{m,n\}”表示紧挨其前的字符出现最少m次,最多n次。如模式”a\{1,3\}b”,表示b以前出现1至3次。ab,aab,aaab均符合此模式。
八、“\<”,“\>”分别表示锚定词首,锚定词尾。如模式”\<stand”表示以stand为开头的词(有可能不是真正的单词,而只是字符串),例如stand,standard均符合此模式。同理有模式“\>”锚定词尾。如模式”t\>”表示以t为结尾的词(或字符串),例如ant,out均符合此模式。
若是想在某文件中查找有某单词的行,则需同时锚定词首词尾。如模式”\<word\>”表示查找文件中包含单词“word”的行。
九、“\(...\)”表示字符串的分组。如模式”\(ab\)\{1,3\}”表示字符串ab出现1至3次的行。此外如想表示以后某处出现以前某处出现过的字符串,而以前某处的字符串还未肯定,亦可以使用此元字符。如想表示在”a.b”以后有任意长度的任意字符,以后又出现了符合模式”a.b”的字符串,且后来出现的ab之间的字符与以前ab之间的字符一致。此种状况可用表达式”\(a.b\).*\1”表示,其中\1表示此表达式中第一个”\(...\)”所圈定的内容;如要表示第二个”\(...\)”中的内容则使用\2表示,依次类推。
经过以上各元字符的综合使用,就能够查找符合匹配条件的字符串了。