grep是什么?

指令用于查找内容包含指定的范本样式的文件,如果发现某文件的内容符合所指定的范本样式,预设 grep 指令会把含有范本样式的那一列显示出来。若不指定任何文件名称,或是所给予的文件名为 ,则 grep 指令会从标准输入设备读取数据

grep 过滤 擅长查找功能

-v: 排除(取反)
-i: 不区分大小写
-E: 支持多条件匹配扩展正则表达式(或者egrep加强版)
-n: 显示数字
-c:显示匹配的行数
-A:(-A2)过滤文件内容的下两行
-B:(-B2)过滤文件的上两行
-C:(-C2)过滤文件的上下两行
-L:列出不包含匹配行的文件名
-r:递归搜索目录中的所有文件
-R:递归搜索目录中的所有文件,包括符号链接指向的文件
-w:只匹配整个单词
-x:只匹配整行
-F:将模式视为固定字符串,而不是正则表达式
-P:使用 Perl 兼容的正则表达式
-q:静默模式,不输出任何内容,仅返回状态码
-f:从文件中读取模式
-m:最多显示 num 个匹配行grep -m 5
-l:只列出包含匹配行的文件名
-f:从文件中读取匹配样式
-e:指定多个匹配样式
-o:只显示匹配的部分,而不是整行

特殊符号

^:以什么为开头
$:以什么为结尾
^$:空行
*:所有
[]: [abc] 相当于是1个字符 匹配a或b或c 一次匹配一个字符
[^]: [^abc] 相当于是1个字符 不匹配a或不匹配b或不匹配c 排除

在/etc/services 中过滤出ssh

grep 'ssh' /etc/services

在多个文件中查找

grep root /etc/passwd /etc/shadow /etc/gshadow

使用 -v 参数排除指定模式

grep -v root /etc/passwd

显示/etc/passwd文件中不以/bin/sync结尾的行

grep "/bin/sync$" /etc/passwd

显示/etc/passwd文件中不以root开头的行

grep "^root" /etc/passwd

排除文件中的空行,只包含空格的行

echo -e 'root\n\ndocker   \n     \n\nqiang\n   zhenshuai     '>star.txt
cat -n star.txt
1 root
2
3 docker
4
5
6 qiang
7 zhenshuai

方法1

grep -v -n '^$' star.txt
1:root
3:docker
6:qiang
7: zhenshuai

方法2

grep -v -n '^ *$' star.txt
1:root
3:docker
6:qiang
7: zhenshuai

方法3

egrep -v -n '^$|^ +$' star.txt
1:root
3:docker
6:qiang
7: zhenshuai

方法4

grep -n '[a-z]' star.txt
1:root
3:docker
6:qiang
7: zhenshuai

匹配内容及上下文

[root@master ~]$ egrep -C 5 'access_log' /etc/nginx/nginx.conf.rpmnew

log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';

access_log /var/log/nginx/access.log main;

sendfile on;
#tcp_nopush on;

keepalive_timeout 65;

查找内容,只显示文件名

[root@master ~]$ egrep -Rl name /etc/

作者 dmxsp

发表回复

您的电子邮箱地址不会被公开。