Linux中grep和egrep命令详解
rep/egrep
语法:grep [-cinvABC] 'word' filename
-c:打印符合要求的行数
-i:忽略大小写
-n:在输出符合要求的行的同时连同行号一起输出
-v:打印不符合要求的行
-A:后跟一个数字(有无空格都可以),例如A2则表示打印符合要求的行以及下面两行
-B:后跟一个数字,例如B2则表示打印符合要求的行以及上面两行
-C:后跟一个数字,例如C2则表示打印符合要求的行以及上下各两行
把包含‘halt'的行以及这行下面的两行都打印出。
[root@localhost~]#grep-A2'halt'/etc/passwd halt:x:7:0:halt:/sbin:/sbin/halt mail:x:8:12:mail:/var/spool/mail:/sbin/nologin uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
把包含‘halt'的行以及这行上面的两行都打印出。
[root@localhost~]#grep-B2'halt'/etc/passwd sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt
把包含‘halt'的行以及这行上面和下面的各两行都打印出。
过滤出带有某个关键词的行并输出行号
[root@localhost~]#grep-n'root'/etc/passwd 1:root:x:0:0:root:/root:/bin/bash 11:operator:x:11:0:operator:/root:/sbin/nologin
过滤不带有某个关键词的行,并输出行号
[root@localhost~]#grep-nv'nologin'/etc/passwd 1:root:x:0:0:root:/root:/bin/bash 6:sync:x:5:0:sync:/sbin:/bin/sync 7:shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown 8:halt:x:7:0:halt:/sbin:/sbin/halt 26:test:x:511:511::/home/test:/bin/bash 27:test1:x:512:511::/home/test1:/bin/bash
过滤出所有包含数字的行
[root@localhost~]#grep'[0-9]'/etc/inittab #upstartworks,seeinit(5),init(8),andinitctl(8). #0-halt(DoNOTsetinitdefaulttothis) #1-Singleusermode #2-Multiuser,withoutNFS(Thesameas3,ifyoudonothavenetworking) #3-Fullmultiusermode #4-unused #5-X11 #6-reboot(DoNOTsetinitdefaulttothis) id:3:initdefault:
过滤出所有不包含数字的行
[root@localhost~]#grep-v'[0-9]'/etc/inittab #inittabisonlyusedbyupstartforthedefaultrunlevel. # #ADDINGOTHERCONFIGURATIONHEREWILLHAVENOEFFECTONYOURSYSTEM. # #Systeminitializationisstartedby/etc/init/rcS.conf # #Individualrunlevelsarestartedby/etc/init/rc.conf # #Ctrl-Alt-Deleteishandledby/etc/init/control-alt-delete.conf # #Terminalgettysarehandledby/etc/init/tty.confand/etc/init/serial.conf, #withconfigurationin/etc/sysconfig/init. # #Forinformationonhowtowriteupstarteventhandlers,orhow # #Defaultrunlevel.Therunlevelsusedare: #
把所有以‘#'开头的行去除
[root@localhost~]#grep-v'^#'/etc/inittab id:3:initdefault:
去除所有空行和以‘#'开头的行
[root@localhost~]#grep-v'^#'/etc/crontab|grep-v'^$' SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root HOME=/
在正则表达式中,“^”表示行的开始,“$”表示行的结尾,那么空行则可以用“^$”表示,如何打印出不以英文字母开头的行呢?
[root@localhost~]#vimtest.txt [root@localhost~]#cattest.txt 123 abc 456 abc2323 #laksdjf Alllllllll
先在test.txt中写几行字符串,用来做实验。
[root@localhost~]#grep'^[^a-zA-Z]'test.txt 123 456 #laksdjf
[root@localhost~]#grep'[^a-zA-Z]'test.txt 123 456 abc2323 #laksdjf
如果是数字的话就用[0-9]这样的形式,当然有时候也可以用这样的形式[15]即只含有1或者5,注意,它不会认为是15。如果要过滤出数字以及大小写字母则要这样写[0-9a-zA-Z]。另外[]还有一种形式,就是[^字符]表示除[]内的字符之外的字符。
过滤任意一个字符与重复字符
[root@localhost~]#grep'r..o'/etc/passwd operator:x:11:0:operator:/root:/sbin/nologin gopher:x:13:30:gopher:/var/gopher:/sbin/nologin vcsa:x:69:69:virtualconsolememoryowner:/dev:/sbin/nologin
.表示任意一个字符,上例中,就是把符合r与o之间有两个任意字符的行过滤出来,*表示零个或多个前面的字符。
[root@localhost~]#grep'ooo*'/etc/passwd root:x:0:0:root:/root:/bin/bash lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin mail:x:8:12:mail:/var/spool/mail:/sbin/nologin uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin operator:x:11:0:operator:/root:/sbin/nologin postfix:x:89:89::/var/spool/postfix:/sbin/nologin
‘ooo*'表示oo,ooo,oooo...或者更多的‘o'现在你是否想到了‘.*'这个组合表示什么意义?
[root@localhost~]#grep'.*'/etc/passwd|wc-l 27 [root@localhost~]#wc-l/etc/passwd 27/etc/passwd
‘.*'表示零个或多个任意字符,空行也包含在内。
指定要过滤字符出现的次数
[root@localhost~]#grep'o\{2\}'/etc/passwd root:x:0:0:root:/root:/bin/bash lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin mail:x:8:12:mail:/var/spool/mail:/sbin/nologin uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin operator:x:11:0:operator:/root:/sbin/nologin postfix:x:89:89::/var/spool/postfix:/sbin/nologin
也可以不用脱意符\ 加上-E
grep-E'o{2}'/etc/passwd
这里用到了{},其内部为数字,表示前面的字符要重复的次数。上例中表示包含有两个o即‘oo'的行。注意,{}左右都需要加上脱意字符‘\',另外,使用{}我们还可以表示一个范围的,具体格式是‘{n1,n2}'其中n1 上面部分讲的grep,另外常常用到egrep这个工具,简单点讲,后者是前者的扩展版本,我们可以用egrep完成grep不能完成的工作,当然了grep能完成的egrep完全可以完成。如果你嫌麻烦,egrep了解一下即可,因为grep的功能已经足够可以胜任你的日常工作了。下面介绍egrep不用于grep的几个用法。为了试验方便,把test.txt编辑成如下内容: 筛选一个或一个以上前面的字符 筛选零个或一个前面的字符 筛选字符串1或者字符串2 egrep中()的应用 用()表示一个整体,例如(oo)+就表示1个‘oo'或者多个‘oo' 以上就是本次介绍的Linux之grep和egrep命令的全部相关知识点,感谢大家的学习和对毛票票的支持。
rot:x:0:0:/rot:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
operator:x:11:0:operator:/rooot:/sbin/nologin
roooot:x:0:0:/rooooot:/bin/bash
1111111111111111111111111111111
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
[root@localhost~]#egrep'o+'test.txt
rot:x:0:0:/rot:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
operator:x:11:0:operator:/rooot:/sbin/nologin
roooot:x:0:0:/rooooot:/bin/bash
[root@localhost~]#egrep'oo+'test.txt
operator:x:11:0:operator:/root:/sbin/nologin
operator:x:11:0:operator:/rooot:/sbin/nologin
roooot:x:0:0:/rooooot:/bin/bash
[root@localhost~]#egrep'ooo+'test.txt
operator:x:11:0:operator:/rooot:/sbin/nologin
roooot:x:0:0:/rooooot:/bin/bash
[root@localhost~]#egrep'o?'test.txt
rot:x:0:0:/rot:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
operator:x:11:0:operator:/rooot:/sbin/nologin
roooot:x:0:0:/rooooot:/bin/bash
1111111111111111111111111111111
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
[root@localhost~]#egrep'ooo?'test.txt
operator:x:11:0:operator:/root:/sbin/nologin
operator:x:11:0:operator:/rooot:/sbin/nologin
roooot:x:0:0:/rooooot:/bin/bash
[root@localhost~]#egrep'oooo?'test.txt
operator:x:11:0:operator:/rooot:/sbin/nologin
roooot:x:0:0:/rooooot:/bin/bash
[root@localhost~]#egrep'aaa|111|ooo'test.txt
operator:x:11:0:operator:/rooot:/sbin/nologin
roooot:x:0:0:/rooooot:/bin/bash
1111111111111111111111111111111
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
[root@localhost~]#egrep'r(oo)|(at)o'test.txt
operator:x:11:0:operator:/root:/sbin/nologin
operator:x:11:0:operator:/rooot:/sbin/nologin
roooot:x:0:0:/rooooot:/bin/bash
[root@localhost~]#egrep'(oo)+'test.txt
operator:x:11:0:operator:/root:/sbin/nologin
operator:x:11:0:operator:/rooot:/sbin/nologin
roooot:x:0:0:/rooooot:/bin/bash