grep命令详解

grep是文本搜索工具的命令, 它是逐行搜索,并且以整行为结果显示.

grep命令格式

grep [OPTIONS] PATTERN [FILE...]


PATTERN主要是元字符和字符串组成的

元字符

. : 匹配任意单字符,包括空格和globing中的?相同

[]: 方括号内可以放指定字符的范围, 常用格式有[[:digit:]]数字, [[:lower:]]小写字母, [[:uppper:]]大写字母, [[:alpha:]]大小写字母, [[:alnum:]]字母和数字, [[:space:]]空格和回车, [[:punct:]]标点符号

[^]: 中括号内内容取反, 例如[^1-5] 取1到5外所有的字符

次数匹配字符

*: 前面字符可以出现任意次包括0次

\?: 前面字符出现0或1此

\+:前面字符出现一次或一次以上

\{m\}:前面字符出现m次

\{n,m\}: 前面字符出现n到m次

\(0,m\): 前面字符最多出现m次

所以.*表示任意长度字符,包括空

位置锚定符

^:行首锚定

$: 行尾锚定

例: ^[[:space:]]*$表示空行

只包含字母并且首尾两端有空格的字符串就单词,

\<: 锚定词首

\>: 锚定词尾

例: \<[[:alpha:]]*\>表示一个单词

分组

\(\): 将字符串用小括号包起来,后面加次数匹配字符

例: \(abc\)* 表示abc可出现无数次

分组引用

\#:引用前面分好的组,并且前面可以有多个组, #表示第几个组, 组是由左到右的小括号编号的

文本内容
this is aweful
adabcfdabc
[root@centos ~]# grep "\([[:alpha:]]*\(abc\)[[:alpha:]]*\)\2" b
adabcfdabc

注意: 正则表达式的贪婪匹配和非贪婪匹配

例如有个字符串abcderwd, pattern为abc.*d, 结果会为abcderwd而不是abcd, 说明他会尽可能多的匹配, 也就是贪婪模式, 反之则为非贪婪模式.


扩展正则表达式

用法: 

egrep [OPTIONS] PATTERN [FILE...]  或者grep -E


主要说下它和一般正则表达式的相同点和区别

1. 字符匹配一样

2. 次数匹配只有*一样其他都可以省略转义字符\,  例如: ?, + {m,n}

3. 锚定都省略了转义字符\, 只有单词锚定一样\<\>

4. 分组无需\(\),直接用括号()

5.分组引用一样\#

6. 加了或的关系

[root@centos ~]# grep -E --color=auto  "good|bad" b
today is a good day
this is goodis not enough
this is bad

注意两边要全包括, 但如果只要部分, 需要用括号括起来

[root@centos ~]# grep -E --color=auto  " (good|bad) " b
today is a good day


grep中一些常用参数选项

-v:取反

取除了good的说有行

[root@centos ~]# grep -v --color=auto  "good" b
abcd
this is bad
this is ok
thi si aweful 
adabcfdabc

-o: 仅显示匹配的字符串本身,而非整行

[root@centos ~]# grep -o --color=auto  "good" b
good
good

-i: 忽略查询字符串的大小写

[root@centos ~]# grep -i --color=auto  "GooD" b
today is a good day
this is goodis not enough

-E: 支持扩展正则表达式和egrep一样

-A#: 后面直接加数字.来显示搜索到结果行的上下#行

[root@centos ~]# cat b
today is a good day
abcd
this is goodis not enough
this is bad
this is ok
thi si aweful 
adabcfdabc
[root@centos ~]# grep -A1 --color=auto  "good" b
today is a good day
abcd
this is goodis not enough
this is bad

-B#: 后面直接加数字.来显示搜索到结果行的上#行

-C#: 后面直接加数字.来显示搜索到结果行的下#行



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章