正则表达式
用"一串符号"描述有共同属性的数据(用于过滤数据)
正则表达式 由正则符号组成
grep 作用就是在一堆数据里过滤自已想要的数据
格式
grep [选项] “正则表达式” 文件列表 (多个文件间用空格间隔)
grep 'root' /etc/passwd /etc/shadow
命令 | grep [选项] ‘正则表达式’ | grep [选项] ‘正则表达式’
ps aux | grep 'httpd'
选项 可选的 不加选项时按默认方式处理数据
默认把与正则表达式匹配的数据输出到屏幕上
加选项的目的就是改变grep处理数据方式
正则表达式 必写项目
可以由普通字符数字符号组成 ""
如 grep root /etc/passwd
也可以由正则符号组成(元字符)''
文件列表 多个文件间用空格间隔
先把第一个文件中的所有行处理完,再处理下一个文件中的所有行
处理数据从前边的命令来,依次处理命令输出的每一行数据
grep命令的处理顺序
1、以行为处理单位
2、对数据进行逐行处理,处理完当前行自动处理下一行,直到把所有行处理完为止
3、默认输出有与正则表达式匹配数据的行,到屏幕上
4、不加选项,按默认方式处理数据
选项
--color 把与正则表达式匹配的数据标红显示
-n 输出与正则表达式匹配的行在文件中的行号
-c 统计与正则表达式匹配的行数
-q 屏蔽默认输出
-i 忽略字母大小写匹配
-v 输出与正则表达式不匹配的行
-E 去掉正则表达式里的转义符号
正则表达式由正则符号组成(元字符)
$ 匹配行尾 ^$空行
^ 匹配行首 ^# ^a ^awk 以a开头后面wk跟着
. 匹配除换行符(\n)之外的任意单个字符
grep '\.$' a.txt 显示以'.'结尾的行 需要加转义符号‘\’
* 匹配前边的字符或正则表达式 出现的次数
grep 'go*d' abc.txt 前面是g后面是d,1个0出现0次或多次
grep 'gooo*d' test.txt 前面是goo后面是d,1个0出现0次或多次
grep 'go.d' abc.txt '.'显示任意一个字符
()把正则表xt达式作为整体匹配
grep 'g\(oo\)*d' abc.txt //两个O出现零次到多次
grep -E 'g(oo)*d abc.txt' //-E去掉正则表达式里的转义符
.*匹配所有字符
| 或 grep 'root\|daemon' /etc/passwd
grep -E 'root|daemon' /etc/passwd
grep -v -E '^$|^#' /etc/passwd
[]范围内匹配(匹配范围内的任意一个)出现的次数是一次
grep '[139]' test.txtxt 匹配指定的数字
grep -E '1|3|9' test.txt
grep '[0-9]' test. 匹配所有的数字
grep '[#_-]' test.txt 匹配#_-的行
grep '[#-_]' test.txt 匹配从#到_的行
grep '[?!_-]' test.txt 范围内匹配字符
[awk] 匹配所有含有awk的行
[AWK] 匹配所有含有AWK所有的行
[a-z] 匹配所有的小写字母
[a-Z] 匹配所有的大写字母
[a-Z] 匹配所有的大小写字母
[a-zA-Z] 匹配所有的大小写字母
[a-Z0-9] 匹配所有数字和大小写字母
[^a-z]范围内取反
^[0-9] 以数字范围内开头的行
^[157] 以数字1开头以数字5开头以数字7开头
^[^a-z] 不以小写字母任意开头的行
设置正则表达式出现次数,匹配正则表达式出现次数的符号(加"\"转义)
* 匹配前边的正则表达式出现0次到多次 >=0
\+ 匹配前边的正则表达式出现1次到多次 >=1
\? 匹配前边的正则表达式出现0次到1次 <=1
\{n,m\}匹配前边的正则表达式出现指定的次数
\{3\} 匹配前边的字符或正则表达式出现2次 =3
\{3,\}匹配前边的字符或正则表达式至少出现2次 >=
\{3,5\}匹配前边的字符或正则表达式至少出现2次最多出现4次 >=3 and <=5
例
grep --color -E 'g(000){3}' test.txt 3个0出现3次
grep --color -E 'g0{1}d' test.txt 1个0出现1次
grep --color -E '[0-9]{3}' test.txt 0-9任意一个数字连着出现3次
grep --color -E 'go*d' test.txt 出现0次到多次
grep --color -E ‘go+d’test.txt 出现1次到多次
grep --color -E 'go?d' test.txt 出现0次到1次
\< 匹配单词的开头 grep --color "\<th" test.txt \不是转义符号必须存在
\> 匹配单词结尾 grep --color "m\>" test.txt
例
head httpd.conf | grep -i '\<th' --color 显示以\th开头的
head httpd.conf | grep -i 'on\>' --color 显示以on结尾的
匹配MAC地址的正则表达式
00:0c:29:C1:C1:FF
0 1 2 3 4 5 6 7 8 9 A B C D E F
a b c d e f
[0-9a-fA-F]{2}:[0-9a-fA-F]{2}:[0-9a-fA-F]{2}:[0-9a-fA-F]{2}:[0-9a-fA-f]{2}:
[0-9a-fA-F]{2}
grep -E '([0-9a-fA-F]{2}:){5}[0-9a-fA-F]{2}' ifcfg-eth0