Grep
是一个最初用于Unix
操作系统的命令行工具。在给出文件列表或标准输入后,Grep
会对匹配一个或多个正则表达式的文本进行搜索,并只输出匹配(或者不匹配)的行或文本。
前言
历史
Grep
这个应用程序最早由 Ken Thompson (肯·汤普逊)写成。Grep
原先是ed
下的一个应用程序,名称来自于g/re/p
(Globally search a Rregular Expression and Print,以正则表达式进行全局查找并打印)。在ed
下,输入g/re/p
这个命令后,会将所有匹配先定义样式的字符串,以行为单位打印出来。
小贴士:在 1973 年,UNIX 第四版中,grep
首次出现在man
页面中。
命令结构
grep [options] 'command' file
参数说明
grep
-v:取反
-n:显示行号
-o:显示过程
-i:不区分大小写 --ignore-case
-l:不显示找出的内容,只显示文件名
-E:相当于 egrep ,可用扩展正则
-A:显示找到的内容及接下来的N行
-B:显示找到的内容及目标前的N行
-C:显示找到的内容及前后的N行
–P:使用 Perl 正则表达式
举个栗子
例 :获取系统 SELinux 状态
[root@localhost ~]# grep "^SELINUX=" /etc/selinux/config
SELINUX=enforcing
二、使用实例
例 1:
如何过滤出当前目录下某文件夹中的所有一级目录?(补充:不包含目录下面目录的子目录及隐藏目录,即只能是第一级目录)
[root@localhost ~]# ll | grep "^d"
drwxr-xr-x. 2 root root 71 Jul 15 15:26 test
解析:grep ^
表示以XX开头,文件夹的第一列都是d
开头。
例 2:
查看 /etc/services
第 1521
和 3306
行
[root@localhost ~]# grep -E "1521|3306" /etc/services
mysql 3306/tcp # MySQL
mysql 3306/udp # MySQL
ncube-lm 1521/tcp # nCube License Manager
ncube-lm 1521/udp # nCube License Manager
解析:|
表示逻辑或,但是因为是扩展正则,因此需要使用-E
参数。
例 3:
使用 w
命令获取用户数量
[root@localhost ~]# w | grep -Po '[0-9](?= users)'
4
[root@localhost ~]# w
16:56:36 up 2:05, 4 users, load average: 0.00, 0.01, 0.05
USER TTY LOGIN@ IDLE JCPU PCPU WHAT
kane :0 14:51 ?xdm? 55.23s 0.14s gdm-session-worker [pam/gdm-password]
root pts/0 14:51 45:32 0.06s 0.06s -bash
kane pts/1 14:51 2:04m 0.02s 0.02s bash
root pts/2 16:48 4.00s 0.05s 0.01s w
解析:零宽断言。
例 4:
获取 /etc/passwd
中 root
用户和 kane
用户所在行
[root@localhost ~]# grep -En "^root|^kane" /etc/passwd
1:root:x:0:0:root:/root:/bin/bash
38:kane:x:1000:1000:kane:/home/kane:/bin/bash
解析:使用 -n
参数即可显示过滤出来的内容所在行号。
例 5:
假如忘记了 SELinux
配置文件的位置,请查找出文件位置
[root@localhost ~]# find /etc -type f | xargs grep "^SELINUX="
/etc/selinux/config:SELINUX=enforcing
[root@localhost ~]# find /etc -type f | xargs grep -l "^SELINUX="
/etc/selinux/config
解析:使用-l
参数即可不显示过滤出来的关键字,只显示包含关键字的文件名。
例 6:
获取 /etc/passwd
中 kane
用户所在行的上面两行
[root@localhost ~]# grep -nB2 "kane" /etc/passwd
36-sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
37-tcpdump:x:72:72::/:/sbin/nologin
38:kane:x:1000:1000:kane:/home/kane:/bin/bash
附录
参考链接
本文由 柒 创作,采用 知识共享署名4.0
国际许可协议进行许可。
转载本站文章前请注明出处,文章作者保留所有权限。
最后编辑时间: 2018-07-16 12:09 PM