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