GREP:Global search regular expression(RE),是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。 GREP语法格式: grep -[acinv] ‘word’ Filename GREP参数详解: -a :以文本文件方式搜索; -c :计算找到的符合行的次数; -i :忽略大小写; -n:顺便输出行号; -v:反向选择,即显示不包含匹配文本的所有行; -h:查询多文件时不显示文件名; -l :查询多文件时只输出包含匹配字符的文件名; -s:不显示不存在或无匹配文本的错误信息; -E:允许使用egrep扩展模式匹配; -r:递归搜索; -o: 匹配搜索的字符串。
正则表达式:处理字符串的方法,它是以行为单位来进行字符串处理的行为,正则表达式透过一些特殊字符的辅助,可以让使用者轻易达到搜索、删除、替换某特定字串的处理程序。 正则表达式分为基础正则表达式及扩展正则表达式,如下将介绍用法:
#################常用符号#################. 表示任意单个字符。* 表示前面的字符连续出现任意次,包括0次。.* 表示任意长度的任意字符,与通配符中的*的意思相同。\ 表示转义符,当与正则表达式中的符号结合时表示符号本身。[ ] 表示匹配指定范围内的任意单个字符。[^ ] 表示匹配指定范围外的任意单个字符。#################单个字符匹配#################[[:alpha:]]或[a-zA-Z] 表示任意大小写字母。[[:lower:]]或[a-z] 表示任意小写字母。[[:upper:]]或[A-Z] 表示任意大写字母。[[:digit:]]或[0-9] 表示0到9之间的任意单个数字(包括0和9)。[[:alnum:]]或[a-zA-Z0-9] 表示任意数字或字母。[[:space:]] 表示任意空白字符,包括"空格"、"tab键"等。[[:punct:]] 表示任意标点符号。[^[:alpha:]]或[^a-zA-Z] 表示单个非字母字符。[^[:lower:]]或[^a-z] 表示单个非小写字母字符。[^[:upper:]]或[^A-Z] 表示单个非大写字母字符。[^[:digit:]]或[^0-9] 表示单个非数字字符。[^[:alnum:]]或[^a-zA-Z0-9]表示单个非数字非字母字符。[^[:space:]] 表示单个非空白字符。[^[:punct:]] 表示单个非标点符号字符。#简短格式并非所有正则表达式解析器都可以识别。\d 表示任意单个0到9的数字。\D 表示任意单个非数字字符。\t 表示匹配单个横向制表符(相当于一个tab键)。\s 表示匹配单个空白字符,包括"空格","tab制表符"等。\S 表示匹配单个非空白字符。#################次数匹配#################\? 表示匹配其前面的字符0或1次\+ 表示匹配其前面的字符至少1次,或者连续多次,连续次数上不封顶。\{n\} 表示前面的字符连续出现n次,将会被匹配到。\{x,y\} 表示之前的字符至少连续出现x次,最多连续出现y次,都能被匹配到,换句话说,只要之前的字符连续出现的次数在x与y之间,即可被匹配到。\{,n\} 表示之前的字符连续出现至多n次,最少0次,都会陪匹配到。\{n,\} 表示之前的字符连续出现至少n次,才会被匹配到。#################位置边界匹配#################^: 表示锚定行首,此字符后面的任意内容必须出现在行首,才能匹配。: 表示匹配空行,这里所描述的空行表示"回车",而"空格"或"tab"等都不能算作空行。^abc: 表示锚定行尾,此字符前面的任意内容必须出现在行尾,才能匹配。^: 表示abc独占一行时,会被匹配到。\<或者\b :匹配单词边界,表示锚定词首,其后面的字符必须作为单词首部出现。\>或者\b :匹配单词边界,表示锚定词尾,其前面的字符必须作为单词尾部出现。\B: 匹配非单词边界,与\b正好相反。####################分组与后向引用####################( ) 表示分组,我们可以将其中的内容当做一个整体,分组可以嵌套。(ab) 表示将ab当做一个整体去处理。\1 表示引用整个表达式中第1个分组中的正则匹配到的结果。\2 表示引用整个表达式中第2个分组中的正则匹配到的结果。
#################常用符号#################
. 表示任意单个字符。
* 表示前面的字符连续出现任意次,包括0次。
.* 表示任意长度的任意字符,与通配符中的*的意思相同。
\ 表示转义符,当与正则表达式中的符号结合时表示符号本身。
[ ] 表示匹配指定范围内的任意单个字符。
[^ ] 表示匹配指定范围外的任意单个字符。
#################单个字符匹配#################
[[:alpha:]]或[a-zA-Z] 表示任意大小写字母。
[[:lower:]]或[a-z] 表示任意小写字母。
[[:upper:]]或[A-Z] 表示任意大写字母。
[[:digit:]]或[0-9] 表示0到9之间的任意单个数字(包括0和9)。
[[:alnum:]]或[a-zA-Z0-9] 表示任意数字或字母。
[[:space:]] 表示任意空白字符,包括"空格"、"tab键"等。
[[:punct:]] 表示任意标点符号。
[^[:alpha:]]或[^a-zA-Z] 表示单个非字母字符。
[^[:lower:]]或[^a-z] 表示单个非小写字母字符。
[^[:upper:]]或[^A-Z] 表示单个非大写字母字符。
[^[:digit:]]或[^0-9] 表示单个非数字字符。
[^[:alnum:]]或[^a-zA-Z0-9]表示单个非数字非字母字符。
[^[:space:]] 表示单个非空白字符。
[^[:punct:]] 表示单个非标点符号字符。
#简短格式并非所有正则表达式解析器都可以识别。
\d 表示任意单个0到9的数字。
\D 表示任意单个非数字字符。
\t 表示匹配单个横向制表符(相当于一个tab键)。
\s 表示匹配单个空白字符,包括"空格","tab制表符"等。
\S 表示匹配单个非空白字符。
#################次数匹配#################
\? 表示匹配其前面的字符0或1次
\+ 表示匹配其前面的字符至少1次,或者连续多次,连续次数上不封顶。
\{n\} 表示前面的字符连续出现n次,将会被匹配到。
\{x,y\} 表示之前的字符至少连续出现x次,最多连续出现y次,都能被匹配到,换句话说,只要之前的字符连续出现的次数在x与y之间,即可被匹配到。
\{,n\} 表示之前的字符连续出现至多n次,最少0次,都会陪匹配到。
\{n,\} 表示之前的字符连续出现至少n次,才会被匹配到。
#################位置边界匹配#################
^: 表示锚定行首,此字符后面的任意内容必须出现在行首,才能匹配。
: 表示匹配空行,这里所描述的空行表示"回车",而"空格"或"tab"等都不能算作空行。
^abc: 表示锚定行尾,此字符前面的任意内容必须出现在行尾,才能匹配。
^: 表示abc独占一行时,会被匹配到。
\<或者\b :匹配单词边界,表示锚定词首,其后面的字符必须作为单词首部出现。
\>或者\b :匹配单词边界,表示锚定词尾,其前面的字符必须作为单词尾部出现。
\B: 匹配非单词边界,与\b正好相反。
####################分组与后向引用####################
( ) 表示分组,我们可以将其中的内容当做一个整体,分组可以嵌套。
(ab) 表示将ab当做一个整体去处理。
\1 表示引用整个表达式中第1个分组中的正则匹配到的结果。
\2 表示引用整个表达式中第2个分组中的正则匹配到的结果。
准备一个测试文件regular_expression.txt,内容如下: gooooooood good gud goooood gxyzxyzxyzd hello world! this is a beautiful world 123456789 abc123 abc
ABCD ,.;'": 1、匹配g和d之间有一个字符的行; grep g.d regular_expression.txt 2、匹配模式go*d的行; 3、匹配g和d之间包含任意字符串的行 4、过滤包含字符串abc或ABC的行 5、过滤a和c之间包含字符串“abcdefg”中一个字符的行。 6、过滤a和c之间不包含字符串“xyz”中任意一个字符的行。 7、分别过滤文件中包含字母、数字、空格、字母或数字、大写字母、小写字母、标点符号的行 8、过滤文件中不包含标点符号的行。 9、次数匹配(基础正则与扩展正则对比) 10、位置匹配 1)过滤以字符串abc开头的行 2)过滤以789结尾的行 3)过滤空行 4)过滤包含以w开头以d结尾的词的行 11、分组与后向引用 1)过滤g和d之间包含模式‘xyz’的行 2、过滤出机器的ip地址 3、使用后向引用将日期反向显示(年-月-日转换显示为日-月-年) 12、grep其他常用选项举例 -i :忽略大小写; -v:反向选择,即显示不包含匹配文本的所有行; -r:递归搜索,使用grep -nr ‘关键字’ /data/to/path可以递归搜索出目录下所有包含关键字的文件名,所在行数,即改行的内容,非常常用。 -o: 匹配搜索的字符串 -a :以文本文件方式搜索; -c :计算找到的符合行的次数;