1.grep
・grep:global regular expression print__全局正则表达式输出。
・grep 命令用于查找(过滤)文件里符合条件的字符串。
・grep与正则表达式联系紧密。
■语法
grep -[参数] <文件名>
■常用参数
- -A<n(行数)> : 抽出并显示符合要查询内容的行,并显示该行之后n行的内容。
- -B<n(行数)> : 抽出并显示符合要查询内容的行,并显示该行之前n行的内容。
- -c : 显示符合要查询内容行的行数数。
- -i : 忽略字符大小。
- -n : 抽出并显示符合要查询内容的行,并在结果行前标示出该行的编号。
- -v : 抽出并显示符合要查询内容以外的所有行。
■实例
・grep -A<n(行数)> filename
拷贝/etc/passwd到/home/yubx目录下
[root@dell-ap-01 yubx]# cp /etc/passwd /home/yubx
用vi/vim命令修改文件,修改后的passwd文件内容如下:
1 root:x:0:0:root:/root:/bin/bash 2 bin:x:1:1:bin:/bin:/sbin/nologin 3 daemon:x:2:2:daemon:/sbin:/sbin/nologin 4 adm:x:3:4:adm:/var/adm:/sbin/nologin 5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin 6 sync:x:5:0:sync:/sbin 7 dbus:x:81:81:System message bus:/:/sbin/nologin 8 polkitd:x:999:998:User for polkitd:/:/sbin/nologin 9 sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin 10 postfix:x:89:89::/var/spool/postfix:/sbin/nologin 11 chrony:x:998:996::/var/lib/chrony:/sbin/nologin 12 apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin 13 tomcat:x:1000:1000::/home/tomcat:/bin/bash 14 oracle:x:1001:1006::/home/oracle:/bin/bash 15 tomcat0101abcaaaaccc 16 1dddddddddkkkkkkkkkkkkkkkkkaaaaa 17 2fffffffffffffffffff 18 3aaaaaaaaaaaaaa 19 4hhhhhhhhhhhhhhh 20 5ggggggggggggggggggg 21 ~ 22 ~
命令执行结果:
1 [root@dell-ap-01 yubx]# grep -A1 'tomcat' passwd 2 tomcat:x:1000:1000::/home/tomcat:/bin/bash 3 oracle:x:1001:1006::/home/oracle:/bin/bash 4 tomcat0101abcaaaaccc 5 1dddddddddkkkkkkkkkkkkkkkkkaaaaa 6 [root@dell-ap-01 yubx]# grep -A3 'tomcat' passwd 7 tomcat:x:1000:1000::/home/tomcat:/bin/bash 8 oracle:x:1001:1006::/home/oracle:/bin/bash 9 tomcat0101abcaaaaccc 10 1dddddddddkkkkkkkkkkkkkkkkkaaaaa 11 2fffffffffffffffffff 12 3aaaaaaaaaaaaaa 13 [root@dell-ap-01 yubx]# grep -A10 'tomcat' passwd 14 tomcat:x:1000:1000::/home/tomcat:/bin/bash 15 oracle:x:1001:1006::/home/oracle:/bin/bash 16 tomcat0101abcaaaaccc 17 1dddddddddkkkkkkkkkkkkkkkkkaaaaa 18 2fffffffffffffffffff 19 3aaaaaaaaaaaaaa 20 4hhhhhhhhhhhhhhh 21 5ggggggggggggggggggg 22 [root@dell-ap-01 yubx]#
解析:
从文件内容中我们可以看到,含有”tomcat“字符的行有两行,分别是第13行和第15行。
- -A1的场合,符合搜索内容的行被抽出,并且相对目标行后1行的内容也被抽出来了。
- -A3的场合,符合搜索内容的行被抽出,并且相对目标行后3行的内容也被抽出来了。
- -A10的场合,符合搜索内容的行被抽出,并且相对目标行后10行的内容也被抽出来了。(文件中最多只有5行)
综上,-A<n>的意思就是抽出并显示符合检索内容的目标行,以及该目标行后所有n行的内容。
・grep -B<n(行数)> filename
作用:抽出并显示符合检索内容的目标行,以及该目标行前所有n行的内容。
※:由于-B和-A的作用差不多,这里就不举例了。
・grep -c '要查询的字符串' filename
作用:只打印匹配的文本行的行数,不显示匹配的内容。
例:基于上面的passwd文件,执行下面命令。
[root@dell-ap-01 yubx]# grep -c 'tomcat' passwd 2
上面的执行结果的意思是,passwd文件中有两行内容中含有”tomcat“字符串。
・grep -i '要查询的字符串' filename
作用:只打印匹配的文本行的行数,不显示匹配的内容。
例:基于上面的passwd文件,追加一行如下内容。
... ... 4hhhhhhhhhhhhhhh 5ggggggggggggggggggg TOMCAT123456uuusssaaadd ~
执行下面的命令:
[root@dell-ap-01 yubx]# grep -i 'TOMCAT' passwd tomcat:x:1000:1000::/home/tomcat:/bin/bash tomcat0101abcaaaaccc TOMCAT123456uuusssaaadd [root@dell-ap-01 yubx]# grep -i 'tomcat' passwd tomcat:x:1000:1000::/home/tomcat:/bin/bash tomcat0101abcaaaaccc TOMCAT123456uuusssaaadd [root@dell-ap-01 yubx]#
・grep -n '要查询的字符串' filename
作用:抽出并显示符合要查询内容的行,并在结果行前标示出该行的编号。
例:基于上面的文件,执行下面的代码
[root@dell-ap-01 yubx]# grep -n 'tomcat' passwd
13:tomcat:x:1000:1000::/home/tomcat:/bin/bash
15:tomcat0101abcaaaaccc
[root@dell-ap-01 yubx]#
上面执行结果中的「13、15」是目标行所在文件中的行编号。
・grep -v '要查询的字符串' filename
作用:抽出并显示符合要查询内容以外的所有行。
例:基于上面的文件,执行下面的代码
[root@dell-ap-01 yubx]# grep -v 'tomcat' passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin sync:x:5:0:sync:/sbin dbus:x:81:81:System message bus:/:/sbin/nologin polkitd:x:999:998:User for polkitd:/:/sbin/nologin sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin postfix:x:89:89::/var/spool/postfix:/sbin/nologin chrony:x:998:996::/var/lib/chrony:/sbin/nologin apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin oracle:x:1001:1006::/home/oracle:/bin/bash 1dddddddddkkkkkkkkkkkkkkkkkaaaaa 2fffffffffffffffffff 3aaaaaaaaaaaaaa 4hhhhhhhhhhhhhhh 5ggggggggggggggggggg TOMCAT123456uuusssaaadd [root@dell-ap-01 yubx]#
从上面的执行结果可以看出,含有"tomcat"的那两行没有被打印出来。
■写在最后
这里只举了几个grep常用的,操作字符串的例子。
这只是grep强大功能的冰山一角。
还有很多参数这里并没有介绍。具体的参数以及参数作用可以用 「grep --help」查看。
grep更强大的功能是和正则连用,并且很多参数可以组合使用。
在后续的【linux正则】随笔中,还会陆续讲解grep功能。
以上。