Linux中最重要的三个命令在业界被称为“
三剑客
”,它们是awk,sed,grep
grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来
终端输入grep –help可以看到所有的语法参数,翻译了部分,举例一些常用的实例
左边为参数简写,中间为全英文,后面为自己翻译或者网上摘译,实例选取使用广的/etc/passwd,引文里面用户太多,有些只截取了部分,
标记浅蓝色的参数是最为常用的
一、正则表达式选择与解释:
-E, –extended-regexp 将样式为延伸的正则表达式来使用
可以同时增加多个关键字”root””sshd”···········
[root@master ~]# grep -E ‘root|sshd’ /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
-F, –fixed-strings 将样式视为固定字符串的列表
-G, –basic-regexp 将样式视为普通的表示法来使用。
-P, –perl-regexp PATTERN 是一个 Perl 正则表达式
-e, –regexp=PATTERN 指定字符串做为查找文件内容的样式
-f, –file=FILE 指定规则文件,其内容含有一个或多个规则样式,让grep查找符合规则条件的文件内容,格式为每行一个规则样式。
-i, –ignore-case 忽略大小写
筛选关键字ftp,包含FTP
[root@master ~]# grep -i ftp /etc/passwd
ftp
:x:14:50:
FTP
User:/var/
ftp
:/sbin/nologin
-w, –word-regexp 只显示全字符合的列。
只显示整个单词是ftp的行
[root@master ~]# grep -w ft /etc/passwd
[root@master ~]# grep -w ftp /etc/passwd
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
-x, –line-regexp 只显示全列符合的列。
-z, –null-data 一个 0 字节的数据行,但不是空行
二、杂项:
-s, –no-messages 不显示错误信息。
-v, –invert-match 显示不包含匹配文本的所有行。
将/etc/passwd,将没有出现 root 和nologin的行取出来
[root@master sys]# grep -v root /etc/passwd | grep -v nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
-V, –version 显示版本信息。
三、输出控制:
-m, –max-count=NUM NUM 次匹配后停止
筛选关键字nologin,到第2次的时候停止
[root@master ~]# grep -m 2 nologin /etc/passwd
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
-b, –byte-offset 输出的同时打印字节偏移
-n, –line-number 输出的同时打印行号
将/etc/passwd,有出现 root 的行取出来,同时显示这些行在/etc/passwd的行号
[root@master sys]# grep -n root /etc/passwd
1
:root:x:0:0:root:/root:/bin/bash
10
:operator:x:11:0:operator:/root:/sbin/nologin
-H, –with-filename 为每一匹配项打印文件名
[root@master ~]# grep -H nologin /etc/passwd
/etc/passwd
:bin:x:1:1:bin:/bin:/sbin/nologin
/etc/passwd
:daemon:x:2:2:daemon:/sbin:/sbin/nologin
/etc/passwd
:adm:x:3:4:adm:/var/adm:/sbin/nologin
/etc/passwd
:lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
-h, –no-filename 输出时不显示文件名前缀
–label=LABEL 将LABEL 作为标准输入文件名前缀
-o, –only-matching 只显示匹配关键字 部分。
只显示匹配关键字root的内容
[root@master ~]# grep -o root /etc/passwd
root
root
root
root
-q, –quiet, –silent 不显示任何信息。
-a, –text 不要忽略二进制的数据。
-I 显示筛选关键字的文件名
显示文件里有没指定关键字,有的话显示文件名
[root@master ~]# grep -l root /etc/passwd
/etc/passwd
[root@master ~]# grep -l song /etc/passwd
[root@master ~]#
-d, –directories=ACTION 当指定要查找的是目录而非文件时,必须使用这项参数,否则grep指令将回报信息并停止动作。
-D, –devices=ACTION how to handle devices, FIFOs and sockets;
ACTION is ‘read’ or ‘skip’
-r, –recursive 查找文件中指定参数,常用命令
查找/etc下文件中包含
first_yunwei
这个文本的文件[root@master ~]# grep -r first_yunwei /etc/
/etc/gshadow:first_yunwei:!::
/etc/passwd-:first_yunwei:x:1003:1003:运维部:/home/first_yunwei:/bin/bash
/etc/group-:first_yunwei:x:1003:
/etc/gshadow-:first_yunwei:!::
-L, –files-without-match 列出文件内容不符合指定的样式的文件名称。
-l, –files-with-matches 列出文件内容符合指定的样式的文件名称。
-c, –count 计算符合样式的列数。
文件中有关键字 first_yunwei有几行
[root@master ~]# grep -c first_yunwei /etc/passwd
1
-T, –initial-tab make tabs line up (if needed)
-Z, –null FILE名字后打印0字节
四、文件控制:
-B, –before-context=NUM 除了显示符合样式的那一行之外,并显示该行之前的内容
显示关键字root前再加1行内容,如果是2就多显示两行内容
[root@master ~]# grep -B 1 root /etc/passwd
root:x:0:0:root:/root:/bin/bash
—
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
-A, –after-context=NUM 除了显示符合范本样式的那一列之外,并显示该行之后的内容。
显示关键字root后再加1行内容,如果是2就多显示两行内容
[root@master ~]# grep -A 1 root /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
—
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
-C, –context=NUM 除了显示符合样式的那一行之外,并显示该行之前后的内容。
显示关键字root前后再加1行内容,如果是2就多显示两行内容
[root@master ~]# grep -C 1 root /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
—
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
-U, –binary 不去掉 EOL(MSDOS)处的 CR 字符
-u, –unix-byte-offsets 如果 CR 不在那里(MSDOS),报告偏移值
五、最常用实例用管道符筛选
将/etc/passwd,有出现 root 的行取出来
[root@master ~]# grep root /etc/passwd root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin [root@master ~]# cat /etc/passwd | grep root root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin