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/