grep与egrep表达式

"在Linux中正则表达式很重要,在日常使用vim做字处理或程序撰写都会使用到,简单的说,正则表达式就是处理字符串的方法它是以行为单位来进行字符串的处理行为, 正规表示法透过一些特殊符号的辅助,可以让使用者轻易的达到『搜寻/删除/取代』某特定字符串的处理程序!
**grep: **Global search REgularexpression and Print out the line
作用:文本搜索工具,根据用户指定的“模式”对目标文本逐行进行匹配检查;打印匹配到的行
模式:由正则表达式字符及文本字符所编写的过滤条件
语法:grep [options] pattern [file...]
默认一般在管理员下grep给予了别名定义:alias grep='grep --color=auto'及当匹配到了以颜色表示出来。
普通用户也自己在~/.bashrc里添加

grep 常见的命令选项:
-v:显示不被pattern匹配到的行
-i:忽略字符大小写
-n:显示匹配到的行号
-c:统计匹配到的的行数
-o:仅显示匹配到的字符串
-q:静默模式,不输出任何信息
-A#:显示匹配到的行及后#行显示出来
-B#:显示匹配到的行及前#行显示出来
-C#:显示匹配到的行及前后各#行显示出来
-e:实现多个选项间的逻辑or关系
-w:匹配整个单词
-E:使用ERE (egrep)
-F:及fgrep,不支持正则表达式。

grep的示例:

1.我们以/etc/passwd文本来匹配我们所需的信息:
grep -v “root”  /etc/passwd    #除了匹配到的带“root”的行其行行显示出来
[root@centos7 app]#grep -v "root" /etc/passwd
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
.......
tcpdump:x:72:72::/:/sbin/nologin
zj:x:1000:1000:zj:/home/zj:/bin/bash
bob:x:1001:1001::/home/bob:/bin/bash
2.grep -i “root” /etc/passwd     #显示匹配到的“root”不分大小写及“root”“ROOT”都可以
[root@centos7 app]#grep -i "root" /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
rooter:x:1002:1002::/home/rooter:/bin/bash
ROOT:x:1004:1005::/home/ROOT:/bin/bash
3.grep -n "root"  /etc/passwd    #显示匹配到“root”的行及显示行号
[root@centos7 app]#grep -n "root" /etc/passwd
1:root:x:0:0:root:/root:/bin/bash
10:operator:x:11:0:operator:/root:/sbin/nologin
45:rooter:x:1002:1002::/home/rooter:/bin/bash
4.grep -c “root” /etc/passwd     #统计匹配到“root”的行数
[root@centos7 app]#grep -c "root" /etc/passwd
3
5.grep -o “root” /etc/passwd     #仅显示匹配到的“root”字符串
[root@centos7 app]#grep -o "root" /etc/passwd
root
root
root
root
root
root
6.grep -q “root” /etc/passwd     #静默模式,及屏幕上不输出任何信息
[root@centos7 app]#grep -q "root" /etc/passwd
[root@centos7 app]#grep -q "root" /etc/passwd;echo $?
0
及有时候匹配一个字符我只要知道它成功与否。
7.grep -A 1 “root” /etc/passwd   #显示匹配到“root”的行及后面的1行
[root@centos7 app]#grep -A1 "root" /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
--
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
--
rooter:x:1002:1002::/home/rooter:/bin/bash
lao:x:1003:1004::/home/lao:/bin/bash

8.grep -B 1 “root” /etc/passwd    #显示匹配到“root”的行及前面的1行
[root@centos7 app]#grep -B1 "root" /etc/passwd
root:x:0:0:root:/root:/bin/bash
--
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
--
bob:x:1001:1001::/home/bob:/bin/bash
rooter:x:1002:1002::/home/rooter:/bin/bash
9.grep -C 1 “root” /etc/passwd   #显示匹配到“root”的行及前后的1行
[root@centos7 app]#grep -C1 "root" /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
--
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
--
bob:x:1001:1001::/home/bob:/bin/bash
rooter:x:1002:1002::/home/rooter:/bin/bash
lao:x:1003:1004::/home/lao:/bin/bash
10.grep  -e “root” -e “adm”  /etc/passwd #显示匹配到“root”和“bin”的行
[root@centos7 app]#grep -e  "root" -e "adm" /etc/passwd
root:x:0:0:root:/root:/bin/bash
adm:x:3:4:adm:/var/adm:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
rooter:x:1002:1002::/home/rooter:/bin/bash
11.grep  -w "root"  /etc/passwd  #显示匹配到的单词“root”
[root@centos7 app]#grep -w "root" /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
grep -E 使用ERE即(egrep)
grep -f 相当于fgrep,不支持正则表达式

REGEXP由一类特殊字符及文本字符所编写的模式,其中有些字符(元字符)不表示字符字面意义,而表示控制或通配的功能
元字符分类:字符匹配、匹配次数、位置锚定、分组
字符匹配:

[] 匹配指定范围内的任意单个字符
[^] 匹配指定范围外的任意单个字符
[: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次
 \{,n\}匹配前面的字符至多n次
 \{n,\}匹配前面的字符至少n次```
**位置锚定:**
``` ^ 行首锚定,用于模式的最左侧
 $ 行尾锚定,用于模式的最右侧
 ^PATTERN$ 用于模式匹配整行
 ^$ 空行
 ^[[:space:]]*$ 空白行
 \< 或\b词首锚定,用于单词模式的左侧
 \> 或\b词尾锚定;用于单词模式的右侧
 \<PATTERN\>匹配整个单词```
**分组:**\(\) 将一个或多个字符捆绑在一起,当作一个整体进行处理,如:\(root\)\+
```分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量的命名方式为: \1, \2, \3, ...
\1表示从左侧起第一个左括号以及与之匹配右括号之间的模式所匹配到的字符
示例:\(string1\+\(string2\)*\)
\1 :string1\+\(string2\)*
\2 :string2```
**后向引用:**引用前面的分组括号中的模式所匹配字符,而非模式本身
**或者:**\|
```示例:a\|b: a或b C\|cat: C或cat \(C\|c\)at:Cat或cat```
##egrep 
egrep用法与grep 相差不大
egrep=grep -E
egrep[OPTIONS] PATTERN [FILE...]
扩展正则表达式的元字符:
**字符匹配:**
```. 任意单个字符
[] 指定范围的字符
[^] 不在指定范围的字符```

**次数匹配:**
```*:匹配前面字符任意次
?: 0或1次
+:1次或多次
{m}:匹配m次
{m,n}:至少m,至多n次```
**位置锚定:**
```^ :行首
$ :行尾
\<, \b :语首
\>, \b :语尾```
**分组:**
```()
后向引用:\1, \2, ...```
**或者:**
```a|b: a或b
C|cat: C或cat
(C|c)at:Cat或cat```

![](http://upload-images.jianshu.io/upload_images/6137254-64aa557ef252c52b.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
通过上表我们可以看出egrep的使用比grep简单点,过程没那么繁琐。
例:http://www.jianshu.com/p/a046dfbd0edd
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,874评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,102评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,676评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,911评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,937评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,935评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,860评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,660评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,113评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,363评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,506评论 1 346
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,238评论 5 341
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,861评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,486评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,674评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,513评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,426评论 2 352

推荐阅读更多精彩内容