grep正则表达式

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了grep正则表达式相关的知识,希望对你有一定的参考价值。

正则表达式

用"一串符号"描述有共同属性的数据(用于过滤数据)

        正则表达式 由正则符号组成


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


本文出自 “wsyht的博客” 博客,请务必保留此出处http://wsyht2015.blog.51cto.com/9014030/1786328

以上是关于grep正则表达式的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式与grep

Linux基础--grep与正则表达式

grep与基本正则表达式

grep用法详解:grep与正则表达式 [转]

shell (e)grep正则表达式问题

shell脚本——正则表达式(包含grep详细介绍及应用)