Linux中grep和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 # upstart works, see init(5), init(8), and initctl(8). # 0 - halt (Do NOT set initdefault to this) # 1 - Single user mode # 2 - Multiuser, without NFS (The same as 3, if you do not have networking) # 3 - Full multiuser mode # 4 - unused # 5 - X11 # 6 - reboot (Do NOT set initdefault to this) id:3:initdefault:
过滤出所有不包含数字的行
[root@localhost ~]# grep -v "[0-9]" /etc/inittab # inittab is only used by upstart for the default runlevel. # ADDING OTHER CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM. # System initialization is started by /etc/init/rcS.conf # Individual runlevels are started by /etc/init/rc.conf # Ctrl-Alt-Delete is handled by /etc/init/control-alt-delete.conf # Terminal gettys are handled by /etc/init/tty.conf and /etc/init/serial.conf, # with configuration in /etc/sysconfig/init. # For information on how to write upstart event handlers, or how # Default runlevel. The runlevels used are:
把所有以 ‘# 开头的行去除
[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 ~]# vim test.txt [root@localhost ~]# cat test.txt abc2323 #laksdjf Alllllllll
先在test.txt中写几行字符串,用来做实验。
[root@localhost ~]# grep "^[^a-zA-Z]" test.txt #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:virtual console memory owner:/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 [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 n2,表示重复n1到n2次前面的字符,n2还可以为空,则表示大于等于n1次。
上面部分讲的grep,另外常常用到egrep这个工具,简单点讲,后者是前者的扩展版本,我们可以用egrep完成grep不能完成的工作,当然了grep能完成的egrep完全可以完成。如果你嫌麻烦,egrep了解一下即可,因为grep的功能已经足够可以胜任你的日常工作了。下面介绍egrep不用于grep的几个用法。为了试验方便,把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 "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
筛选字符串1或者字符串2
[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
egrep中( )的应用
[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
用( )表示一个整体,例如(oo)+就表示1个 ‘oo 或者多个 ‘oo
[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
本篇文章到此结束,如果您有相关技术方面疑问可以联系我们技术人员远程解决,感谢大家支持本站!
相关文章
- linux 两个很有效命令 hdparm、arping详解程序员
- linux压缩和解压缩命令详解程序员
- 10个有用的Linux命令面试问题及答案详解程序员
- Linux命令之diff详解程序员
- Linux umask命令详解程序员
- Linux系统下修改IP地址的命令教程(linux命令修改ip地址)
- 掌握Linux命令快速设置IP(linux命令设置ip)
- Linux 中轻松读取文件的方法(linux如何读取文件)
- Linux驱动学习:视频精通之旅(linux驱动教程视频)
- Linux:设置写入权限管理(linux设置写入权限)
- Linux菜刀:让您更高效工作的神器(linux菜刀)
- 使用Linux查看系统时间的方法(linux查看系统时间命令)
- 服务器深入Linux世界:拷贝文件到服务器(如何拷贝文件到linux)
- Linux下关机命令:一步步操作指南(linux下如何关机命令)
- Linux下快速轻松的截图技巧(linux命令截图)
- 昆明:开启Linux学习之旅(昆明linux培训)
- v简单操作:Linux下使用mv命令移动目录(linux目录m)
- 安装Linux系统:LZMA安装详解(linux安装lzma)
- 优化Linux进程切换开销(linux进程切换开销)
- 命令提升效率:Linux精通Grep命令(linux的grep)
- 深入了解Linux命令,让URL变得更加便捷(linux命令url)
- Linux 如何解压中文乱码?(linux解压中文乱码)
- 轻松掌握:Linux命令快速返回上级目录(linux命令返回上一级)
- 探究Linux多进程下的信号量机制(linux多进程信号量)
- 体验 Linux 专属网络连接命令 nc(linux 命令 nc)
- 系统定制Linux系统:满足你的每一个需求(定制 linux)
- 「Linux 最大连接数」:提升您的网络性能(最大连接数linux)
- 配置Linux系统的静态IP地址(linux静态ip地址)
- Linux查找文件的命令汇总:快速精准的搜索方式(linux查找文件的命令)
- Linux下中断控制的注册与使用(linux 中断 注册)