[TOC]
grep的作用是可以匹配文件内容中指定的字符串,并显示字符串所在的行。如果只是匹配字符串,那么作用就很有限。所以grep也是支持正则表达式的。
一、正则表达式
正则表达式:某个字符串集合的精确表达,由普通字符和特殊字符构成,普通字符包括大小写字母,数字及空格和下划线,而特殊字符对正则表达式来说具有特殊的含义,它会被扩展用来匹配普通字符。正式因为使用了这些特殊字符,才使得我们不用明确一一指定普通字符的不同组合。
特殊字符含义:
[字符]:表示匹配[ ]中限定的字符范围。[0-9]表示数字,[a-z]表示小写字母
^:一般表示行首以什么开头,在[ ]中表示范围取反
$:行的结尾,^\$表示空行
.:表示任意一个字符
*:表示前面的字符有0个或多个,**不表示一个字符,表示的是在它前面字符的个数**
.*:任意字符
以下特殊符号需要脱义或者使用egrep(grep -E)
{}:表示匹配的字符重复的次数
():表示一个整体,后面需要引用时,使用n,n为数字
?:表示0个或1个前面字符
+:表示一个或多个前面字符
|:表示或者,字符串1|字符串2|字符串3
二、grep用法
1、格式
grep 选项 “字符串(正则表达式)” 文件名
2、选项作用
-n 打印行号
|
|
-c 统计符合要求的行数
|
|
-v 打印不符合要求的行
|
|
-i 忽略大小写
|
|
-w 精确匹配
|
|
-r 匹配目录下
|
|
-q 安静模式,即不输出内容,用于shell脚本判断
-E 使用特殊符号是不需要使用脱义符,类似egrep
-l 匹配多个文件时,输出只打印符合条件的文件
|
|
-ABC 后面跟数字,显示匹配到的行的上下n行
A:所在行以及下面n行
B:所在行以及上面n行
C:所在行以及上下n行
三、grep应用实例
grep -n ‘root’ /etc/passwd
|
|
grep -nv ‘nologin’ /etc/passwd
|
|
grep ‘[0-9]’ /etc/inittab
|
|
grep -v ‘[0-9]’/etc/inittab
|
|
grep -v ‘^#’ /etc/inittab
|
|
grep -v ‘^#’ /etc/inittab|grep -v ‘^$’
|
|
grep ‘^[^a-zA-Z]‘ test.txt
|
|
grep ‘r.o’ test.txt
|
|
grep ‘oo*’ test.txt
|
|
grep ‘.*’ test.txt
|
|
grep -E ‘o{2}‘ test.txt
|
|
egrep ‘o{2}’ test.txt
|
|
egrep ‘o+’ test.txt
|
|
egrep ‘oo?’ /etc/passwd
|
|
egrep ‘root|nologin’ /etc/passwd
|
|
egrep ‘(oo){2}’ /etc/passwd
|
|