在我们使用Linux的时候,经常需要对一些文本进行处理,这里简单介绍一个小工具:grep(Global search REgular expression and Print out the line)。

   

   简单的说正则表达式就是处理字符串的方法,它可以通过一些特殊符号的配合使用,轻松让使用者轻松对数据进行过滤,达到查找、删除、修改某字符的处理程序。


    REGEXP :由一类特殊字符及文本字符所编写的模式,其中有些字符(元字符)不表示字符字面意义,而表示控制或通配的功能。

    

   元字符分类:字符匹配、匹配次数、位置锚定、分组

    

   语法:grep [OPTIONS] PATTERN [FILE...]


常用选项:

--color=auto:  对匹配到的文本着色显示

-v:  显示不被pattern 匹配到的行(即取反)

-i:  忽略字符大小写

-n:  显示匹配的行号

-c:  统计匹配的行数

-o:  仅显示匹配到的字符串

-q:  静默模式,不输出任何信息

-A #: after,  后#行 行

-B #: before,  前#行 行

-C # :context,  前后各#行 行

-e :实现多个选项间的逻辑or 关系(grep –e ‘a ’ -e ‘b’ file)

-w :匹配 整个单词

-E :相当于egrep

-F :相当于fgrep ,不支持正则表达式


字符匹配:


.        匹配任意单个字符

[]       匹配指定范围内的任意单个字符

[^]      匹配指定范围外的任意单个字符

[:alnum:]  代表字母和数字

[:alpha:]  代表任何英文大小写字符,亦即 A-Z, a-z

[:lower:]  小写字母 

[:upper:]  大写字母

[:blank:]  空白字符(空格和制表符)

[:space:]  水平和垂直的空白字符(比[:blank:] 包含的范围广)

[:cntrl:]  不可打印的控制字符(退格、删除、警铃...) )

[:digit:]  十进制数字 

[:xdigit:]  十六进制数字

[:graph:]  可打印的非空白字符

[:print:]  可打印字符

[:punct:]  标点符号


匹配次数:


作用:用在要指定次数的字符后面,用于指定前面的字符要出现的次数

.   匹配一个字符

[]  中括号内的任意字符,多选一

[^]  中括号内的不选,去括号内的反

*   匹配 前面的字符任意次,包括0次(一般处于贪婪模式:尽可能长的匹配)

.*  任意 长度的任意字符

\?  匹配 其前面的字符0 或1次 次

\+  匹配 其前面的字符至少1次 次

\{n\}  匹配 前面的字符n次 次

\{m,n\}  匹配 前面的字符至少m 次,至多n次 


位置锚定:定位出现的位置

^  行首锚定,用于模式的最左侧

$  行尾锚定,用于模式的最右侧

^PATTERN$ 用于模式匹配整行

^$ 空行

^[[:space:]]*$ 空白行

\< 或 或 \b  词首锚定,用于单词模式的左侧

\> 或 或 \b  词尾锚定;用于单词模式的右侧

\<PATTERN\>  仅匹配单词

\|        或者(a\|b: a 或b )


分组:\(\)  将一个或多个字符捆绑在一起,当作一个整体进

行处理,\string表示从左侧起第一个左括号以及与之匹配右括号之间的

模式所匹配到的字符。如:\(root\) \string1, \string2, \string3, ..


后向引用:引用前面的分组括号中的模式所匹配字符 , 而非模式本身