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更广泛的用途是通过使用正则表达式所匹配的字符串模式,查找含有更复杂的字符串的行。正则表达式是由各元字符与普通字符所构成的,以下说明基本正则表达式中各元字符的作用:

1、“^”表示锚定行首。例如grep “^root”表示在文件/etc/passwd中查找以root为行首的行。

2、“$”表示锚定行尾。例如grep “root$”表示在文件/etc/passwd中查找以root为行尾的行。

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

3、“.”表示任意单个字符。如模式”a.b”表示a之后跟任意字符,之后跟b。abb,acb,aab等均符合此模式。

4、“*”表示紧挨其前的字符出现任意次。如模式”a*b”,凡是b之前出现任意次a的字符串均符合此模式(包括零次),符合此模式的例如aab,aaab,b,acb等。其中“b”是a出现零次的情况;“acb”符合是因为其中包含“b”,即此行有符合”a*b”模式的字符串,而不是说“acb”整体符合模式”a*b”。

配合“.”的使用,”.*”表示任意长度的任意字符。

5、“[...]”表示从“[]”中选择一个字符。如模式”[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等。

7、“\{m,n\}”表示紧挨其前的字符出现最少m次,最多n次。如模式”a\{1,3\}b”,表示b之前出现1至3次。ab,aab,aaab均符合此模式。

8、“\<”,“\>”分别表示锚定词首,锚定词尾。如模式”\<stand”表示以stand为开头的词(有可能不是真正的单词,而只是字符串),例如stand,standard均符合此模式。同理有模式“\>”锚定词尾。如模式”t\>”表示以t为结尾的词(或字符串),例如ant,out均符合此模式。

如果想在某文件中查找有某单词的行,则需同时锚定词首词尾。如模式”\<word\>”表示查找文件中包含单词“word”的行。

9、“\(...\)”表示字符串的分组。如模式”\(ab\)\{1,3\}”表示字符串ab出现1至3次的行。此外如想表示之后某处出现之前某处出现过的字符串,而之前某处的字符串还未确定,亦可使用此元字符。如想表示在”a.b”之后有任意长度的任意字符,之后又出现了符合模式”a.b”的字符串,且后来出现的ab之间的字符与之前ab之间的字符一致。此种情况可用表达式”\(a.b\).*\1”表示,其中\1表示此表达式中第一个”\(...\)”所圈定的内容;如要表示第二个”\(...\)”中的内容则使用\2表示,依次类推。

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





转载于:https://blog.51cto.com/maximum/1248854