Shell三剑客_1.grep

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功能。

以上。

上一篇:linux-sed


下一篇:ftp 用户 /sbin/nologin 后 在登录报530错误